@@ -730,6 +730,96 @@ describe("customize language modal", () => {
730730 } ) ;
731731} ) ;
732732
733+ describe ( "script options search" , ( ) => {
734+ it ( "returns all scripts for an empty query" , ( ) => {
735+ const t = new TestHelper ( ) ;
736+ const allScripts = t . viewModel . searchScriptOptions ( "" ) ;
737+ expect ( allScripts . length ) . toBeGreaterThan ( 100 ) ;
738+ } ) ;
739+
740+ it ( "finds a script by fuzzy matching a misspelled name" , ( ) => {
741+ const t = new TestHelper ( ) ;
742+ const results = t . viewModel . searchScriptOptions ( "Cyrilic" ) ;
743+ expect ( results [ 0 ] . code ) . toBe ( "Cyrl" ) ;
744+ } ) ;
745+
746+ it ( "finds a script by code" , ( ) => {
747+ const t = new TestHelper ( ) ;
748+ const results = t . viewModel . searchScriptOptions ( "Latn" ) ;
749+ expect ( results [ 0 ] . code ) . toBe ( "Latn" ) ;
750+ } ) ;
751+ } ) ;
752+
753+ describe ( "invalid variant warning" , ( ) => {
754+ it ( "fires when customize modal submits an invalidly formatted variant" , ( ) => {
755+ const t = new TestHelper ( { initialLanguages : [ NorthernUzbekLanguage ] } ) ;
756+ t . viewModel . listedLanguages . value [ 0 ] . isSelected . requestUpdate ( true ) ;
757+ const spy = vi . fn ( ) ;
758+ t . viewModel . warnInvalidVariant . requestUpdate ( spy ) ;
759+
760+ // 11 characters, too long for a BCP 47 variant subtag (5-8)
761+ t . viewModel . submitCustomizeLanguageModal ( { dialect : "dialectTest" } ) ;
762+
763+ expect ( spy ) . toHaveBeenCalledWith ( "dialectTest" ) ;
764+ } ) ;
765+
766+ it ( "still applies the customizations after warning" , ( ) => {
767+ const t = new TestHelper ( { initialLanguages : [ NorthernUzbekLanguage ] } ) ;
768+ t . viewModel . listedLanguages . value [ 0 ] . isSelected . requestUpdate ( true ) ;
769+ t . viewModel . warnInvalidVariant . requestUpdate ( vi . fn ( ) ) ;
770+
771+ t . viewModel . submitCustomizeLanguageModal ( { dialect : "dialectTest" } ) ;
772+
773+ expect ( t . viewModel . customizations . value ?. dialect ) . toBe ( "dialectTest" ) ;
774+ } ) ;
775+
776+ it ( "does not fire for a valid variant" , ( ) => {
777+ const t = new TestHelper ( { initialLanguages : [ NorthernUzbekLanguage ] } ) ;
778+ t . viewModel . listedLanguages . value [ 0 ] . isSelected . requestUpdate ( true ) ;
779+ const spy = vi . fn ( ) ;
780+ t . viewModel . warnInvalidVariant . requestUpdate ( spy ) ;
781+
782+ t . viewModel . submitCustomizeLanguageModal ( { dialect : "foobar" } ) ;
783+
784+ expect ( spy ) . not . toHaveBeenCalled ( ) ;
785+ } ) ;
786+
787+ it ( "does not fire for an empty variant" , ( ) => {
788+ const t = new TestHelper ( { initialLanguages : [ NorthernUzbekLanguage ] } ) ;
789+ t . viewModel . listedLanguages . value [ 0 ] . isSelected . requestUpdate ( true ) ;
790+ const spy = vi . fn ( ) ;
791+ t . viewModel . warnInvalidVariant . requestUpdate ( spy ) ;
792+
793+ t . viewModel . submitCustomizeLanguageModal ( { } ) ;
794+
795+ expect ( spy ) . not . toHaveBeenCalled ( ) ;
796+ } ) ;
797+
798+ it ( "does not fire for ai- variants" , ( ) => {
799+ const t = new TestHelper ( { initialLanguages : [ NorthernUzbekLanguage ] } ) ;
800+ t . viewModel . listedLanguages . value [ 0 ] . isSelected . requestUpdate ( true ) ;
801+ const spy = vi . fn ( ) ;
802+ t . viewModel . warnInvalidVariant . requestUpdate ( spy ) ;
803+
804+ t . viewModel . submitCustomizeLanguageModal ( { dialect : "ai-translation" } ) ;
805+
806+ expect ( spy ) . not . toHaveBeenCalled ( ) ;
807+ } ) ;
808+
809+ it ( "fires when unlisted modal submits a name that is not a valid variant" , ( ) => {
810+ const t = new TestHelper ( ) ;
811+ const spy = vi . fn ( ) ;
812+ t . viewModel . warnInvalidVariant . requestUpdate ( spy ) ;
813+
814+ t . viewModel . submitUnlistedLanguageModal ( {
815+ name : "Foo Bar" ,
816+ region : AndorraRegion ,
817+ } ) ;
818+
819+ expect ( spy ) . toHaveBeenCalledWith ( "Foo Bar" ) ;
820+ } ) ;
821+ } ) ;
822+
733823describe ( "edit custom tag prompt" , ( ) => {
734824 it ( "shows when custom tag exists and customization button is clicked" , ( ) => {
735825 const t = new TestHelper ( ) ;
0 commit comments