@@ -70,6 +70,85 @@ class CourseTests: CoreTestCase {
7070 XCTAssertEqual ( resultEnrollment? . canvasContextID, " course_1 " )
7171 }
7272
73+ func testIsPastEnrollmentWithWorkflowState( ) {
74+ let completedCourse = Course . make ( from: . make( workflow_state: . completed) )
75+ XCTAssertTrue ( completedCourse. isPastEnrollment)
76+
77+ let availableCourse = Course . make ( from: . make( workflow_state: . available) )
78+ XCTAssertFalse ( availableCourse. isPastEnrollment)
79+
80+ let futureDate = Clock . now. addDays ( 10 )
81+ let completedWithFutureDates = Course . make ( from: . make(
82+ workflow_state: . completed,
83+ end_at: futureDate,
84+ term: . make( end_at: futureDate)
85+ ) )
86+ XCTAssertTrue ( completedWithFutureDates. isPastEnrollment)
87+ }
88+
89+ func testIsPastEnrollmentWithCourseEndDate( ) {
90+ let pastDate = Clock . now. addDays ( - 10 )
91+ let courseWithPastEnd = Course . make ( from: . make( end_at: pastDate) )
92+ XCTAssertTrue ( courseWithPastEnd. isPastEnrollment)
93+
94+ let futureDate = Clock . now. addDays ( 10 )
95+ let courseWithFutureEnd = Course . make ( from: . make( end_at: futureDate) )
96+ XCTAssertFalse ( courseWithFutureEnd. isPastEnrollment)
97+
98+ Clock . mockNow ( Date ( timeIntervalSince1970: 1000000 ) )
99+ let exactlyNow = Clock . now
100+ let courseEndingNow = Course . make ( from: . make( end_at: exactlyNow) )
101+ XCTAssertFalse ( courseEndingNow. isPastEnrollment)
102+
103+ let futureCourseEnd = Clock . now. addDays ( 5 )
104+ let futureTermEnd = Clock . now. addDays ( 10 )
105+ let courseEndPrecedence = Course . make ( from: . make(
106+ end_at: futureCourseEnd,
107+ term: . make( end_at: futureTermEnd)
108+ ) )
109+ XCTAssertFalse ( courseEndPrecedence. isPastEnrollment)
110+ }
111+
112+ func testIsPastEnrollmentWithTermEndDate( ) {
113+ let pastDate = Clock . now. addDays ( - 10 )
114+ let term = APICourse . Term. make ( end_at: pastDate)
115+ let courseWithPastTermEnd = Course . make ( from: . make( end_at: nil , term: term) )
116+ XCTAssertTrue ( courseWithPastTermEnd. isPastEnrollment)
117+
118+ let futureDate = Clock . now. addDays ( 10 )
119+ let termWithFutureEnd = APICourse . Term. make ( end_at: futureDate)
120+ let courseWithFutureTermEnd = Course . make ( from: . make( end_at: nil , term: termWithFutureEnd) )
121+ XCTAssertFalse ( courseWithFutureTermEnd. isPastEnrollment)
122+
123+ let termWithoutEnd = APICourse . Term. make ( end_at: nil )
124+ let courseWithNoTermEnd = Course . make ( from: . make( end_at: nil , term: termWithoutEnd) )
125+ XCTAssertFalse ( courseWithNoTermEnd. isPastEnrollment)
126+
127+ let courseWithNoTerm = Course . make ( from: . make( end_at: nil , term: nil ) )
128+ XCTAssertFalse ( courseWithNoTerm. isPastEnrollment)
129+ }
130+
131+ func testIsPastEnrollmentWithCourseEndAndTermEndDate( ) {
132+ // Given
133+ let pastDate = Clock . now. addDays ( - 10 )
134+ let futureDate = Clock . now. addDays ( 10 )
135+
136+ // When
137+ var term = APICourse . Term. make ( end_at: pastDate)
138+ var course = Course . make ( from: . make( end_at: futureDate, term: term) )
139+ XCTAssertFalse ( course. isPastEnrollment)
140+
141+ // When
142+ term = APICourse . Term. make ( end_at: futureDate)
143+ course = Course . make ( from: . make( end_at: pastDate, term: term) )
144+ XCTAssertTrue ( course. isPastEnrollment)
145+
146+ // When
147+ term = APICourse . Term. make ( end_at: pastDate. addDays ( - 10 ) )
148+ course = Course . make ( from: . make( end_at: pastDate, term: term) )
149+ XCTAssertTrue ( course. isPastEnrollment)
150+ }
151+
73152 func testDeletesOnlyDanglingEnrollments( ) {
74153 let apiCourse = APICourse . make ( id: " 1 " )
75154 let course = Course . make ( from: apiCourse)
0 commit comments