@@ -8,6 +8,7 @@ import catalogPage from 'codecrafters-frontend/tests/pages/catalog-page';
88import coursePage from 'codecrafters-frontend/tests/pages/course-page' ;
99import courseOverviewPage from 'codecrafters-frontend/tests/pages/course-overview-page' ;
1010import createCourseExtensionIdeas from 'codecrafters-frontend/mirage/utils/create-course-extension-ideas' ;
11+ import percySnapshot from '@percy/ember' ;
1112import testScenario from 'codecrafters-frontend/mirage/scenarios/test' ;
1213
1314module ( 'Acceptance | course-page | extensions | enable-extensions' , function ( hooks ) {
@@ -135,4 +136,56 @@ module('Acceptance | course-page | extensions | enable-extensions', function (ho
135136
136137 assert . true ( coursePage . configureExtensionsModal . isVisible , 'configure extensions modal is visible' ) ;
137138 } ) ;
139+
140+ test ( 'progress pills show correct status for different extension states' , async function ( assert ) {
141+ testScenario ( this . server ) ;
142+ signInAsStaff ( this . owner , this . server ) ;
143+
144+ let currentUser = this . server . schema . users . first ( ) ;
145+ let python = this . server . schema . languages . findBy ( { name : 'Python' } ) ;
146+ let course = this . server . schema . courses . findBy ( { slug : 'dummy' } ) ;
147+
148+ let repository = this . server . create ( 'repository' , 'withBaseStagesCompleted' , {
149+ course : course ,
150+ language : python ,
151+ user : currentUser ,
152+ } ) ;
153+
154+ let extensions = course . extensions . models . sortBy ( 'position' ) ;
155+ let extension1Stages = course . stages . models . filter ( ( stage ) => stage . primaryExtensionSlug === extensions [ 0 ] . slug ) ;
156+ let extension2Stages = course . stages . models . filter ( ( stage ) => stage . primaryExtensionSlug === extensions [ 1 ] . slug ) ;
157+
158+ extension1Stages . forEach ( ( stage ) => {
159+ this . server . create ( 'submission' , 'withStageCompletion' , {
160+ repository,
161+ courseStage : stage ,
162+ createdAt : repository . createdAt ,
163+ } ) ;
164+ } ) ;
165+
166+ this . server . create ( 'submission' , 'withStageCompletion' , {
167+ repository,
168+ courseStage : extension2Stages . sortBy ( 'positionWithinExtension' ) [ 0 ] ,
169+ createdAt : repository . createdAt ,
170+ } ) ;
171+
172+ await catalogPage . visit ( ) ;
173+ await catalogPage . clickOnCourse ( 'Build your own Dummy' ) ;
174+ await courseOverviewPage . adminPanel . clickOnStartCourse ( ) ;
175+ await coursePage . sidebar . configureExtensionsToggles [ 0 ] . click ( ) ;
176+ await percySnapshot ( 'Configure Extensions Modal - Progress Pills' ) ;
177+
178+ let cards = coursePage . configureExtensionsModal . extensionCards . toArray ( ) ;
179+
180+ assert . true ( cards [ 0 ] . hasPill , 'Extension 1 has completed pill' ) ;
181+ assert . strictEqual ( cards [ 0 ] . pillText , 'Completed' , 'Extension 1 pill shows "Completed"' ) ;
182+ assert . true ( cards [ 1 ] . hasPill , 'Extension 2 has in-progress pill' ) ;
183+ assert . strictEqual ( cards [ 1 ] . pillText , 'In Progress' , 'Extension 2 pill shows "In Progress"' ) ;
184+
185+ await coursePage . configureExtensionsModal . toggleExtension ( 'Extension 1' ) ;
186+ cards = coursePage . configureExtensionsModal . extensionCards . toArray ( ) ;
187+ const disabledExtension1Card = cards . find ( ( card ) => card . name === 'Extension 1' ) ;
188+ assert . true ( disabledExtension1Card . hasPill , 'Disabled extension still has pill when completed' ) ;
189+ assert . strictEqual ( disabledExtension1Card . pillText , 'Completed' , 'Disabled extension pill still shows "Completed"' ) ;
190+ } ) ;
138191} ) ;
0 commit comments