1
+ // The MIT License (MIT)
2
+ //
3
+ // Copyright (c) 2019 Lucas Nelaupe
4
+ //
5
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ // of this software and associated documentation files (the "Software"), to deal
7
+ // in the Software without restriction, including without limitation the rights
8
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ // copies of the Software, and to permit persons to whom the Software is
10
+ // furnished to do so, subject to the following conditions:
11
+ //
12
+ // The above copyright notice and this permission notice shall be included in all
13
+ // copies or substantial portions of the Software.
14
+ //
15
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ // SOFTWARE.
22
+
23
+ import XCTest
24
+ import Dispatch
25
+ @testable import SwiftQueue
26
+
27
+ @available ( iOS 13 . 0 , tvOS 13 . 0 , macOS 10 . 15 , * )
28
+ class BackgroundTasksTest {
29
+
30
+ let serializers : [ JobInfoSerializer ] = [
31
+ V1Serializer ( ) ,
32
+ DecodableSerializer ( )
33
+ ]
34
+
35
+ @available ( iOS 13 . 0 , tvOS 13 . 0 , macOS 10 . 15 , * )
36
+ public func testBackgroundOperationShouldNotRun( ) {
37
+ let ( type, job) = ( UUID ( ) . uuidString, TestJob ( ) )
38
+
39
+ let creator = TestCreator ( [ type: job] )
40
+
41
+ let manager = SwiftQueueManagerBuilder ( creator: creator) . set ( persister: NoSerializer . shared) . build ( )
42
+ JobBuilder ( type: type)
43
+ . periodic ( executor: . background)
44
+ . internet ( atLeast: . wifi)
45
+ . priority ( priority: . veryHigh)
46
+ . service ( quality: . background)
47
+ . schedule ( manager: manager)
48
+
49
+ job. assertNoRun ( )
50
+ }
51
+
52
+
53
+ @available ( iOS 13 . 0 , tvOS 13 . 0 , macOS 10 . 15 , * )
54
+ public func testBuilderPeriodicLimited( ) throws {
55
+ for serializer in serializers {
56
+ let type = UUID ( ) . uuidString
57
+ let limited : Double = 123
58
+ let interval : Double = 12342
59
+ let executor = Executor . any
60
+
61
+ let jobInfo = try toJobInfo ( serializer, type: type, JobBuilder ( type: type) . periodic ( limit: . limited( limited) , interval: interval, executor: . any) )
62
+ XCTAssertEqual ( jobInfo? . maxRun, Limit . limited ( limited) )
63
+ XCTAssertEqual ( jobInfo? . interval, interval)
64
+ XCTAssertEqual ( jobInfo? . executor, executor)
65
+ }
66
+ }
67
+
68
+ @available ( iOS 13 . 0 , tvOS 13 . 0 , macOS 10 . 15 , * )
69
+ public func testBuilderPeriodicBackground( ) throws {
70
+ for serializer in serializers {
71
+ let type = UUID ( ) . uuidString
72
+ let limited : Double = 123
73
+ let interval : Double = 12342
74
+ let executor = Executor . background
75
+
76
+ let jobInfo = try toJobInfo ( serializer, type: type, JobBuilder ( type: type) . periodic ( limit: . limited( limited) , interval: interval, executor: . background) )
77
+ XCTAssertEqual ( jobInfo? . maxRun, Limit . limited ( limited) )
78
+ XCTAssertEqual ( jobInfo? . interval, interval)
79
+ XCTAssertEqual ( jobInfo? . executor, executor)
80
+ }
81
+ }
82
+
83
+ @available ( iOS 13 . 0 , tvOS 13 . 0 , macOS 10 . 15 , * )
84
+ public func testGetAllAllowBackgroundOperation( ) {
85
+ let ( type, job) = ( UUID ( ) . uuidString, TestJob ( ) )
86
+
87
+ let id = UUID ( ) . uuidString
88
+ let id2 = UUID ( ) . uuidString
89
+
90
+ let group = UUID ( ) . uuidString
91
+ let group2 = UUID ( ) . uuidString
92
+
93
+ let creator = TestCreator ( [ type: job] )
94
+
95
+ let persister = PersisterTracker ( key: UUID ( ) . uuidString)
96
+
97
+ let manager = SwiftQueueManagerBuilder ( creator: creator) . set ( isSuspended: true ) . set ( persister: persister) . build ( )
98
+
99
+ JobBuilder ( type: type) . periodic ( executor: . foreground) . parallel ( queueName: group) . schedule ( manager: manager)
100
+ JobBuilder ( type: type) . periodic ( executor: . foreground) . parallel ( queueName: group2) . schedule ( manager: manager)
101
+
102
+ JobBuilder ( type: type) . singleInstance ( forId: id) . periodic ( executor: . background) . parallel ( queueName: group) . schedule ( manager: manager)
103
+ JobBuilder ( type: type) . singleInstance ( forId: id2) . periodic ( executor: . any) . parallel ( queueName: group2) . schedule ( manager: manager)
104
+
105
+ let result = manager. getAllAllowBackgroundOperation ( )
106
+
107
+ XCTAssertEqual ( 2 , result. count)
108
+ XCTAssertTrue ( [ id, id2] . contains ( result [ 0 ] . info. uuid) )
109
+ XCTAssertTrue ( [ id, id2] . contains ( result [ 1 ] . info. uuid) )
110
+ }
111
+
112
+
113
+
114
+ }
0 commit comments