| // Copyright 2019 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:cocoon_service/src/model/appengine/stage.dart'; |
| import 'package:cocoon_service/src/model/appengine/task.dart'; |
| import 'package:test/test.dart'; |
| |
| import '../src/utilities/entity_generators.dart'; |
| |
| Stage buildStage({ |
| String name = 'stage', |
| List<String> statuses = const <String>[Task.statusNew], |
| }) { |
| final Iterable<Task> tasks = statuses.map<Task>((String status) => generateTask(1, status: status)); |
| final StageBuilder builder = StageBuilder() |
| ..name = name |
| ..commit = generateCommit(1) |
| ..tasks.addAll(tasks); |
| return builder.build(); |
| } |
| |
| void main() { |
| group('Stage', () { |
| test('ordering', () { |
| final List<Stage> stages = <Stage>[ |
| buildStage(name: 'devicelab'), |
| buildStage(name: 'unknown'), |
| ]; |
| stages.sort(); |
| expect(stages.map<String?>((Stage stage) => stage.name), <String>['devicelab', 'unknown']); |
| }); |
| |
| test('isManagedByDeviceLab', () { |
| expect(buildStage(name: 'devicelab').isManagedByDeviceLab, isTrue); |
| expect(buildStage(name: 'unknown').isManagedByDeviceLab, isFalse); |
| }); |
| |
| test('taskStatus', () { |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusSucceeded, |
| ], |
| ).taskStatus, |
| Task.statusSucceeded, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusSucceeded, |
| Task.statusSucceeded, |
| Task.statusFailed, |
| ], |
| ).taskStatus, |
| Task.statusFailed, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusNew, |
| Task.statusFailed, |
| Task.statusNew, |
| ], |
| ).taskStatus, |
| Task.statusFailed, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusInProgress, |
| Task.statusFailed, |
| Task.statusInProgress, |
| ], |
| ).taskStatus, |
| Task.statusFailed, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusSucceeded, |
| Task.statusFailed, |
| Task.statusSucceeded, |
| ], |
| ).taskStatus, |
| Task.statusFailed, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusNew, |
| Task.statusFailed, |
| Task.statusInProgress, |
| Task.statusSucceeded, |
| ], |
| ).taskStatus, |
| Task.statusFailed, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusNew, |
| Task.statusInProgress, |
| Task.statusNew, |
| ], |
| ).taskStatus, |
| Task.statusInProgress, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusNew, |
| Task.statusSucceeded, |
| Task.statusNew, |
| ], |
| ).taskStatus, |
| Task.statusInProgress, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusSucceeded, |
| Task.statusSucceeded, |
| Task.statusInProgress, |
| ], |
| ).taskStatus, |
| Task.statusInProgress, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusNew, |
| Task.statusNew, |
| ], |
| ).taskStatus, |
| Task.statusNew, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusInProgress, |
| Task.statusInProgress, |
| ], |
| ).taskStatus, |
| Task.statusInProgress, |
| ); |
| expect( |
| buildStage( |
| statuses: <String>[ |
| Task.statusSucceeded, |
| Task.statusSucceeded, |
| ], |
| ).taskStatus, |
| Task.statusSucceeded, |
| ); |
| }); |
| }); |
| |
| group('StatusBuilder', () { |
| test('validates state of the stage', () { |
| expect(() => StageBuilder().build(), throwsStateError); |
| expect(() => (StageBuilder()..name = 'name').build(), throwsStateError); |
| expect(() => (StageBuilder()..commit = generateCommit(1)).build(), throwsStateError); |
| expect( |
| () => (StageBuilder() |
| ..name = 'name' |
| ..commit = generateCommit(1)) |
| .build(), |
| throwsStateError, |
| ); |
| }); |
| }); |
| } |