aboutsummaryrefslogtreecommitdiff
path: root/static/testmanualrunner/main.js
blob: 9146052e1069723a8aab4ccf897e06f315a4615d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
APP.config(['$routeProvider', function($routeProvider) {

	$routeProvider
		.when('/testrun/new/:build_id', {
			templateUrl: '/static/testmanualrunner/templates/testrun_form.html',
			controller: 'New'
		})
		.when('/testrun/:id', {
			templateUrl: '/static/testmanualrunner/templates/testrun_execute.html',
			controller: 'Execute'
		})
		.when('/', {
			templateUrl: '/static/testmanualrunner/templates/testrun_form.html',
			controller: 'Index'
		})

}]);

function Index($scope, $window, $routeParams, TestRun) {
	$scope.test_runs = TestRun.query();
}

function Execute($scope, $window, $routeParams, $q,
				 TestRun, TestPlan, Status, TestRunResult, TestRunResultBug, Build, Trackers) {
	$q.all([
		Status.query().$promise,
		TestRun.get({id:$routeParams.id}).$promise,
		Trackers.query().$promise
	]).then(function(responses) {
		$scope.statuses = responses[0];
		$scope.test_run = responses[1];
		$scope.trackers = responses[2];

		$scope.statuses_by_id = _.indexBy(responses[0], 'id');

		return $q.all([
			TestPlan.get({id:$scope.test_run.test_plan}).$promise,
			Build.get({id:$scope.test_run.test_plan}),
			TestRunResult.query({test_run:$scope.test_run.id}).$promise,
		]);

	}).then(function(responses) {
		$scope.test_plan = responses[0];
		$scope.build = responses[1];
		$scope.test_run_results = responses[2];

		$scope.test_run_results_by_test_definition = _.indexBy(
			$scope.test_run_results,
			'test_definition'
		);

		$scope.active_test_definition = $scope.test_plan.tests_definitions[0];
	})

	$scope.get_status = function(test_definition) {
		var status = $scope.test_run_results_by_test_definition[test_definition.id].status;
		if (status) {
			return $scope.statuses_by_id[status]
		}
		return {}
	}

	$scope.set_status = function(status, test_definition) {
		var test_run_result = $scope.test_run_results_by_test_definition[test_definition.id];
		if (status) {
			test_run_result.status = status.id;
		} else {
			test_run_result.status = null;
		}
		TestRunResult.update({id: test_run_result.id}, test_run_result);
	}

	$scope.set_active_test_definition = function(test_definition) {
		$scope.active_test_definition = test_definition;
	}

	$scope.add_bug = function(alias, tracker, test_definition) {
		var test_run_result = $scope.test_run_results_by_test_definition[test_definition.id];
		TestRunResultBug.add(
			{id:test_run_result.id},
			{alias:alias, tracker:tracker, action:"add"}).$promise
			.then(function(bug) {
				missing = true;
				_.each(test_run_result.bugs, function(value, i) {
					if (value.id == bug.id) {
						missing = false
					}
				});
				if (missing) {
					test_run_result.bugs.unshift(bug);
				}
			});
	}

	$scope.remove_bug = function(bug, test_definition) {
		var test_run_result = $scope.test_run_results_by_test_definition[test_definition.id];
		TestRunResultBug.remove(
			{id:test_run_result.id},
			{alias:bug.alias, tracker:bug.tracker, action:"remove"}).$promise
			.then(function(bug) {
				var index = -1;
				_.each(test_run_result.bugs, function(value, i) {
					if (value.id == bug.id) {
						index = i;
					}
				});
				if (index != -1) {
					test_run_result.bugs.splice(index, 1);
				}
			});
	}

	$scope.get_test_run_results = function(test_definition) {
		return $scope.test_run_results_by_test_definition[test_definition.id];
	}

}

function New($scope, $q, $routeParams, $location, Build, TestPlan, TestRun) {

	$q.all([
		Build.get({id: $routeParams.build_id }).$promise,
		TestPlan.query().$promise
	]).then(function(data) {
		$scope.build = data[0];
		$scope.test_plan_list = data[1];
	});

	$scope.submit = function() {
		TestRun.save({
			test_plan: $scope.test_plan,
			build: $scope.build.id
		}, function(data) {
			$location.path('/testrun/' + data.id);
		}, function(response) {
			$scope.error = response.data
		})

	}
}