package Ġsuite Ċ Ċ import Ġclient Admin 1 Ċ import Ġcom . alg ol ia . search . helper . to Attribute Ċ import Ġcom . alg ol ia . search . model . filter . Filter Ċ import Ġcom . alg ol ia . search . model . filter . Filter Group Ċ import Ġcom . alg ol ia . search . model . search . Facet Stats Ċ import Ġcom . alg ol ia . search . model . search . Query Ċ import Ġcom . alg ol ia . search . model . search . get Ċ import Ġcom . alg ol ia . search . model . settings . Attribute For Fac eting Ċ import Ġcom . alg ol ia . search . model . settings . Settings Ċ import Ġcom . alg ol ia . search . model . task . Task Ċ import Ġcom . alg ol ia . search . model . task . Task Status Ċ import Ġkotlinx . serialization . builtins . List Serializer Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġrun Blocking Ċ import ĠshouldBe True Ċ import Ġshould Equal Ċ import Ġshould Not BeNull Ċ import Ġkotlin . test . Test Ċ Ċ internal Ġclass ĠTest Suite Dis j unct ive Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsuffix Ġ= Ġ" dis j unct ive " ĊĠĠĠ Ġprivate Ġval Ġindex Name Ġ= Ġtest Suite Index Name ( suffix ) ĊĠĠĠ Ġprivate Ġval Ġindex Ġ= Ġclient Admin 1 . init Index ( index Name ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest A () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrand Ġ= Ġ" brand ". to Attribute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġ" category ". to Attribute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstars Ġ= Ġ" stars ". to Attribute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfac ets Ġ= Ġset Of ( brand , Ġcategory , Ġstars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠSettings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes For Fac eting Ġ= Ġfac ets . map Ġ{ ĠAttribute For Fac eting . Default ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobjects Ġ= Ġload ( List Serializer ( JsonObject . serializer ()), Ġ" dis j unct ive _ A . json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġ" phone ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfac ets Ġ= Ġfac ets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter . Facet ( brand , Ġ" Apple "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter . Facet ( brand , Ġ" S amsung "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter . Facet ( brand , Ġ" Com mas ' Ġvoice , ĠLtd ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Groups Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Group . Or . Facet ( filters ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Group . And . Facet ( Filter . Facet ( category , Ġ" device ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġmutable ListOf < Task >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġsave Objects ( objects ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġset Settings ( settings ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . wait (). all Ġ{ Ġit Ġis ĠTask Status . Published Ġ}. shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . advanced Search ( query , Ġfilter Groups ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . nb Hits Ġshould Equal Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets OrNull . should Not BeNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets [ brand , Ġ" Apple "] Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets [ brand , Ġ" S amsung "] Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets [ brand , Ġ" Wh atever "] Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets [ brand , Ġ" Com mas ' Ġvoice , ĠLtd "] Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exhaustive Fac ets Count . shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats [ stars ] Ġshould Equal ĠFac et Stats ( 2 f , Ġ 5 f , Ġ 4 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest B () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Ġ= Ġ" city ". to Attribute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstars Ġ= Ġ" stars ". to Attribute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfacilities Ġ= Ġ" fac ilities ". to Attribute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠSettings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes For Fac eting Ġ= ĠlistOf ( stars , Ġcity , Ġfacilities ). map Ġ{ ĠAttribute For Fac eting . Default ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobjects Ġ= Ġload ( List Serializer ( JsonObject . serializer ()), Ġ" dis j unct ive _ B . json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġ" h ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfac ets Ġ= Ġset Of ( city ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= Ġmutable Set Of < Filter . Facet >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter City Ġ= ĠFilter Group . And . Facet ( Filter . Facet ( city , Ġ" Par is ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġmutable ListOf < Task >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġsave Objects ( objects ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġset Settings ( settings ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . wait (). all Ġ{ Ġit Ġis ĠTask Status . Published Ġ}. shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . advanced Search ( query ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . nb Hits Ġshould Equal Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exhaustive Fac ets Count . shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Ġ+= ĠFilter . Facet ( stars , Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . advanced Search ( query , Ġset Of ( Filter Group . Or . Facet ( filters ))). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . nb Hits Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 1 "] Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 2 "] Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 4 "] Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exhaustive Fac ets Count . shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats [ stars ] Ġshould Equal ĠFac et Stats ( 1 f , Ġ 4 f , Ġ 2 f , Ġ 1 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . advanced Search ( query , Ġset Of ( Filter Group . Or . Facet ( filters ), Ġfilter City )). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . nb Hits Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 1 "] Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 4 "] Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats [ stars ] Ġshould Equal ĠFac et Stats ( 1 f , Ġ 4 f , Ġ 2 f , Ġ 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Ġ+= ĠFilter . Facet ( stars , Ġ" 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . advanced Search ( query , Ġset Of ( Filter Group . Or . Facet ( filters ), Ġfilter City )). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . nb Hits Ġshould Equal Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dis j unct ive Fac ets . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 1 "] Ġshould Equal Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ stars , Ġ" 4 "] Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats . size Ġshould Equal Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . facet Stats [ stars ] Ġshould Equal ĠFac et Stats ( 1 f , Ġ 4 f , Ġ 2 f , Ġ 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ