@@ -502,5 +502,93 @@ test.describe('Route | crate.settings.new-trusted-publisher', { tag: '@routes' }
502502 await expect ( page ) . toHaveURL ( `/crates/${ crate . name } /settings` ) ;
503503 await expect ( page . locator ( '[data-test-gitlab-config]' ) ) . toHaveCount ( 0 ) ;
504504 } ) ;
505+
506+ test . describe ( 'workflow verification' , ( ) => {
507+ test ( 'success case (200 OK)' , async ( { msw, page } ) => {
508+ let { crate } = await prepare ( msw ) ;
509+
510+ await page . goto ( `/crates/${ crate . name } /settings/new-trusted-publisher` ) ;
511+ await expect ( page ) . toHaveURL ( `/crates/${ crate . name } /settings/new-trusted-publisher` ) ;
512+
513+ // Select GitLab from the publisher dropdown
514+ await page . selectOption ( '[data-test-publisher]' , 'GitLab' ) ;
515+
516+ await msw . worker . use (
517+ http . head ( 'https://gitlab.com/rust-lang/crates.io/-/raw/HEAD/.gitlab-ci.yml' , ( ) => {
518+ return new HttpResponse ( null , { status : 200 } ) ;
519+ } ) ,
520+ ) ;
521+
522+ await expect ( page . locator ( '[data-test-workflow-verification="initial"]' ) ) . toHaveText (
523+ 'The workflow filepath will be verified once all necessary fields are filled.' ,
524+ ) ;
525+
526+ await page . fill ( '[data-test-namespace]' , 'rust-lang' ) ;
527+ await page . fill ( '[data-test-project]' , 'crates.io' ) ;
528+ await page . fill ( '[data-test-workflow]' , '.gitlab-ci.yml' ) ;
529+
530+ await expect ( page . locator ( '[data-test-workflow-verification="success"]' ) ) . toBeVisible ( ) ;
531+
532+ await expect ( page . locator ( '[data-test-workflow-verification="success"]' ) ) . toHaveText (
533+ '✓ Workflow file found at https://gitlab.com/rust-lang/crates.io/-/raw/HEAD/.gitlab-ci.yml' ,
534+ ) ;
535+ } ) ;
536+
537+ test ( 'not found case (404)' , async ( { msw, page } ) => {
538+ let { crate } = await prepare ( msw ) ;
539+
540+ await page . goto ( `/crates/${ crate . name } /settings/new-trusted-publisher` ) ;
541+ await expect ( page ) . toHaveURL ( `/crates/${ crate . name } /settings/new-trusted-publisher` ) ;
542+
543+ // Select GitLab from the publisher dropdown
544+ await page . selectOption ( '[data-test-publisher]' , 'GitLab' ) ;
545+
546+ await msw . worker . use (
547+ http . head ( 'https://gitlab.com/rust-lang/crates.io/-/raw/HEAD/missing.yml' , ( ) => {
548+ return new HttpResponse ( null , { status : 404 } ) ;
549+ } ) ,
550+ ) ;
551+
552+ await page . fill ( '[data-test-namespace]' , 'rust-lang' ) ;
553+ await page . fill ( '[data-test-project]' , 'crates.io' ) ;
554+ await page . fill ( '[data-test-workflow]' , 'missing.yml' ) ;
555+
556+ await expect ( page . locator ( '[data-test-workflow-verification="not-found"]' ) ) . toBeVisible ( ) ;
557+
558+ await expect ( page . locator ( '[data-test-workflow-verification="not-found"]' ) ) . toHaveText (
559+ '⚠ Workflow file not found at https://gitlab.com/rust-lang/crates.io/-/raw/HEAD/missing.yml' ,
560+ ) ;
561+
562+ // Verify form can still be submitted
563+ await page . click ( '[data-test-add]' ) ;
564+ await expect ( page ) . toHaveURL ( `/crates/${ crate . name } /settings` ) ;
565+ } ) ;
566+
567+ test ( 'server error (5xx)' , async ( { msw, page } ) => {
568+ let { crate } = await prepare ( msw ) ;
569+
570+ await page . goto ( `/crates/${ crate . name } /settings/new-trusted-publisher` ) ;
571+ await expect ( page ) . toHaveURL ( `/crates/${ crate . name } /settings/new-trusted-publisher` ) ;
572+
573+ // Select GitLab from the publisher dropdown
574+ await page . selectOption ( '[data-test-publisher]' , 'GitLab' ) ;
575+
576+ await msw . worker . use (
577+ http . head ( 'https://gitlab.com/rust-lang/crates.io/-/raw/HEAD/.gitlab-ci.yml' , ( ) => {
578+ return new HttpResponse ( null , { status : 500 } ) ;
579+ } ) ,
580+ ) ;
581+
582+ await page . fill ( '[data-test-namespace]' , 'rust-lang' ) ;
583+ await page . fill ( '[data-test-project]' , 'crates.io' ) ;
584+ await page . fill ( '[data-test-workflow]' , '.gitlab-ci.yml' ) ;
585+
586+ await expect ( page . locator ( '[data-test-workflow-verification="error"]' ) ) . toBeVisible ( ) ;
587+
588+ await expect ( page . locator ( '[data-test-workflow-verification="error"]' ) ) . toHaveText (
589+ '⚠ Could not verify workflow file at https://gitlab.com/rust-lang/crates.io/-/raw/HEAD/.gitlab-ci.yml (network error)' ,
590+ ) ;
591+ } ) ;
592+ } ) ;
505593 } ) ;
506594} ) ;
0 commit comments