/* Ċ Ġ* ĠThis Ġprogram Ġhas Ġbeen Ġdeveloped Ġby Ġstudents Ġfrom Ġthe Ġb ache lor ĠComputer ĠScience Ġat ĠU tre cht ĠUniversity Ġwithin Ġthe ĠSoftware ĠProject Ġcourse . Ċ Ġ* ĠÂ© ĠCopyright ĠU tre cht ĠUniversity Ġ( Department Ġof ĠInformation Ġand ĠComputing ĠSci ences ) Ċ Ġ*/ Ċ package Ġcom . ap ex devs . backend . persistence Ċ Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Domain Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Domain Access Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Domain Topic Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Domain Visibility Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Topic Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . User Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . User Domain Access Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . User Status Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . Domain Repository Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . Domain Topic Repository Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . Topic Repository Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . User Domain Access Repository Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . UserRepository Ċ import Ġcom . ap ex devs . backend . persistence . exception . Domain NotFoundException Ċ import Ġcom . ap ex devs . backend . persistence . exception . User AccessException Ċ import Ġcom . ap ex devs . backend . persistence . exception . User Domain Access NotFoundException Ċ import Ġcom . ap ex devs . backend . persistence . exception . User NotFoundException Ċ import Ġcom . ap ex devs . backend . web . controller . entity . domain . Domain Details Ċ import Ġcom . ap ex devs . backend . web . controller . entity . domain . Domain Upload Request Ċ import Ġio . mock k . Capt uring Slot Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . spy k Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġjava . util . Optional Ċ Ċ @ DisplayName (" Database ĠDomain Operation Ġtests ") Ċ class ĠDomain Operation Test () Ġ{ ĊĠĠĠ Ġ// Ġcreate Ġmock ing Ġobjects ĊĠĠĠ Ġprivate Ġval Ġdomain Repository Ġ= Ġmock k < Domain Repository >() ĊĠĠĠ Ġprivate Ġval Ġuser Repository Ġ= Ġmock k < UserRepository >() ĊĠĠĠ Ġprivate Ġval Ġuser Domain Access Repository Ġ= Ġmock k < User Domain Access Repository >() ĊĠĠĠ Ġprivate Ġval Ġdomain Topic Repository Ġ= Ġmock k < Domain Topic Repository >() ĊĠĠĠ Ġprivate Ġval Ġtopic Repository Ġ= Ġmock k < Topic Repository >() ĊĊĠĠĠ Ġprivate Ġfun Ġget Domain Operation () Ġ= ĠDomain Operation ( domain Repository , Ġuser Repository , Ġuser Domain Access Repository , Ġdomain Topic Repository , Ġtopic Repository ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġget Domain Details ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert ĠDomain Details Ġare Ġreturned Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġtest Ġdata ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġspy k ( getTest Domain ()) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain . id . to HexString () Ġ} Ġreturns Ġ" test Id " ĊĊĠĠĠĠĠĠĠ Ġval Ġspy Domain Operation Ġ= Ġspy k ( get Domain Operation ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġspy Domain Operation . get Topics ( any ()) Ġ} Ġanswers Ġ{ ĠlistOf ( Topic ( ObjectId (), Ġ" test 1 ")) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġexpected Ġoutput ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠDomain Details ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . id . to HexString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . description , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . visibility , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" test 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . ontology Prefix IR I , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . tools Tax onomy Root , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . data Dimensions Tax onomy Roots , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain . strict Tools Annotations ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġresult Ġwith Ġexpectation ĊĠĠĠĠĠĠĠ Ġassert ( spy Domain Operation . get Domain Details ( domain ) Ġ== Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġget Topics ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġget Ġtopics Ġreturn Ġcorrect Ġformat `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġtopic 1 Ġ= ĠTopic ( ObjectId . get (), Ġ" test Topic 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġtopic 2 Ġ= ĠTopic ( ObjectId . get (), Ġ" test Topic 2 ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Topic Repository . findBy Domain Id ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Topic ( domain . id , Ġtopic 1 . id ), ĠDomain Topic ( domain . id , Ġtopic 2 . id )) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtopic Repository . findAll ById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( topic 1 , Ġtopic 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġmethod ĊĠĠĠĠĠĠĠ Ġval Ġtopics Ġ= Ġdomain Operation . get Topics ( domain ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġreturn Ġvalue ĊĠĠĠĠĠĠĠ Ġassert ( topics . size Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġassert ( topics . contains All ( listOf ( topic 1 , Ġtopic 2 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġget Domain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġget Ġdomain Ġreturns Ġcorrect Ġdomain `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġresults ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( domain ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġmethod ĊĠĠĠĠĠĠĠ Ġval Ġdomain Result Ġ= Ġdomain Operation . get Domain ( domain . id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcompare Ġresult ĊĠĠĠĠĠĠĠ Ġassert ( domain Result Ġ== Ġdomain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġget Domain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġget Ġdomain Ġthrows Ġif Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġresults ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġexception Ġis Ġthrown ĊĠĠĠĠĠĠĠ ĠassertThrows < Domain NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . get Domain ( domain . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġcreate Domain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġcreate Ġdomain Ġinserts Ġcorrect Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( user ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcapture Ġinsert ions ĊĠĠĠĠĠĠĠ Ġval Ġdomain Slot Ġ= Ġslot < Domain >() ĊĠĠĠĠĠĠĠ Ġval Ġaccess Slot Ġ= Ġslot < User Domain Access >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Repository . insert ( capture ( domain Slot )) Ġ} Ġanswers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdomain Slot . captured Ġ} ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . insert ( capture ( access Slot )) Ġ} Ġanswers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġaccess Slot . captured Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġmethod ĊĠĠĠĠĠĠĠ Ġdomain Operation . create Domain ( domain , Ġuser . id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġcaptures ĊĠĠĠĠĠĠĠ Ġassert ( domain Slot . is Capt ured ) ĊĠĠĠĠĠĠĠ Ġassert ( domain Slot . captured Ġ== Ġdomain ) ĊĠĠĠĠĠĠĠ Ġassert ( access Slot . is Capt ured ) ĊĠĠĠĠĠĠĠ Ġval Ġaccess Capture Ġ= Ġaccess Slot . captured ĊĠĠĠĠĠĠĠ Ġassert ( access Capture . userId Ġ== Ġuser . id ) ĊĠĠĠĠĠĠĠ Ġassert ( access Capture . domain Id Ġ== Ġdomain . id ) ĊĠĠĠĠĠĠĠ Ġassert ( access Capture . access Ġ== ĠDomain Access . Owner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġcreate Domain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġcreate Ġdomain Ġthrows Ġif Ġno Ġuser Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġexception Ġis Ġthrown ĊĠĠĠĠĠĠĠ ĠassertThrows < User NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . create Domain ( domain , ĠObjectId . get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġget Domain Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġget Ġdomain Ġaccess Ġreturns Ġcorrect Ġaccess `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findBy UserId And Domain Id ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( User Domain Access ( user . id , Ġdomain . id , ĠDomain Access . Owner )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġmethod Ġand Ġcheck Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġaccess Ġ= Ġdomain Operation . get Domain Access ( user , Ġdomain ) ĊĠĠĠĠĠĠĠ Ġassert ( access Ġ== ĠDomain Access . Owner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġget Domain Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġget Ġdomain Ġaccess Ġthrows Ġif Ġno Ġaccess Ġobject Ġis Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findBy UserId And Domain Id ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġexception Ġis Ġthrown ĊĠĠĠĠĠĠĠ ĠassertThrows < User Domain Access NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . get Domain Access ( getTest User (), Ġget Test Domain ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġsave Domain , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġsave Ġdomain Ġworks Ġfor Ġauthorized Ġusers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain , Ġuser Ġand Ġslot Ġfor Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġval Ġdomain Slot Ġ= Ġslot < Domain >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġsave Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠOwner , ĠRead Write Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Slot , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Access . Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Access . ReadWrite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdomain Operation : ĠDomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . save Domain ( domain , Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( domain Slot . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( domain Slot . captured Ġ== Ġdomain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġsave Domain , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġsave Ġdomain Ġthrows Ġfor Ġun authorized Ġusers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain , Ġuser Ġand Ġslot Ġfor Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġval Ġdomain Slot Ġ= Ġslot < Domain >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġsave Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠRead , ĠRev oked Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Slot , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Access . Read , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Access . Rev oked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdomain Operation : ĠDomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < User AccessException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . save Domain ( domain , Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġarchive Domain , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġarchive Ġdomain Ġworks Ġfor Ġauthorized Ġusers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain , Ġuser Ġand Ġslot Ġfor Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġval Ġdomain Slot Ġ= Ġslot < Domain >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġarchive Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠOwner Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Slot , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Access . Owner ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdomain Operation : ĠDomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . archive Domain ( domain , Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( domain Slot . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( domain Slot . captured Ġ== Ġdomain . copy ( visibility Ġ= ĠDomain Visibility . Arch ived )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġarchive Domain , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġarchive Ġdomain Ġthrows Ġfor Ġun authorized Ġusers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain , Ġuser Ġand Ġslot Ġfor Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġval Ġdomain Slot Ġ= Ġslot < Domain >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġarchive Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠRead Write , ĠRead , ĠRev oked Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Slot , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Access . ReadWrite , ĠDomain Access . Read , ĠDomain Access . Rev oked ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdomain Operation : ĠDomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < User AccessException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . archive Domain ( domain , Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġhas Ġuser Ġaccess Ġfor Ġpublic Ġdomains `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġpublic Ġdomain Ġis Ġread Ġaccessible ĊĠĠĠĠĠĠĠ Ġassert ( domain Operation . has User Access ( domain , ĠDomain Access . Read , Ġuser . id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġhas Ġuser Ġaccess Ġfor Ġprivate Ġread Ġauthorized Ġdomains `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġhas User Access Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠOwner , ĠRead Write , ĠRead Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Access . Owner , ĠDomain Access . ReadWrite , ĠDomain Access . Read ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( domain Operation . has User Access ( domain , ĠDomain Access . Read , Ġuser . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġhas Ġuser Ġaccess Ġfor Ġprivate Ġwrite Ġauthorized Ġdomains `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġhas User Access Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠOwner , ĠRead Write , ĠRead Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Access . Owner , ĠDomain Access . ReadWrite ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( domain Operation . has User Access ( domain , ĠDomain Access . ReadWrite , Ġuser . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġno Ġuser Ġaccess Ġfor Ġprivate Ġread Ġun authorized Ġdomains `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġhas User Access Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠRead , ĠRev oked Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Access . Rev oked ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert (! domain Operation . has User Access ( domain , ĠDomain Access . Read , Ġuser . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġno Ġuser Ġaccess Ġfor Ġprivate Ġwrite Ġun authorized Ġdomains `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġhas User Access Ġoperation Ġon Ġdomain Ġwith Ġ{ ĠRead , ĠRev oked Ġ} ĊĠĠĠĠĠĠĠ Ġperform Domain Update For Authorized User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Domain Access . Read , ĠDomain Access . Rev oked ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert (! domain Operation . has User Access ( domain , ĠDomain Access . ReadWrite , Ġuser . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġis Ġauthorized Ġdomain Ġuser Ġis Ġfalse Ġfor Ġinvalid Ġuser `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġmethod Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has User Access ( domain , ĠDomain Access . ReadWrite , Ġuser . id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas User Access , Ġis Authorized Domain User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġis Ġauthorized Ġdomain Ġuser Ġis Ġfalse Ġfor Ġinvalid Ġuser Ġaccess `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( user ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findBy UserId And Domain Id ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġmethod Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has User Access ( domain , ĠDomain Access . ReadWrite , Ġuser . id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġhas Anonymous Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġanonymous Ġaccess Ġfor Ġdomains Ġthat Ġshould `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpublic Domain Ġ= Ġget Test Domain ( Domain Visibility . Public ) ĊĠĠĠĠĠĠĠ Ġval Ġprivate Domain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcan Ġonly Ġaccess Ġpublic Ġdomains Ġfor Ġread Ġaccess ĊĠĠĠĠĠĠĠ Ġassert ( domain Operation . has Anonymous Access ( public Domain , ĠDomain Access . Read )) ĊĠĠĠĠĠĠĠ Ġ// Ġnothing Ġelse ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has Anonymous Access ( private Domain , ĠDomain Access . Read )) ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has Anonymous Access ( private Domain , ĠDomain Access . ReadWrite )) ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has Anonymous Access ( private Domain , ĠDomain Access . Owner )) ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has Anonymous Access ( public Domain , ĠDomain Access . ReadWrite )) ĊĠĠĠĠĠĠĠ Ġassert (! domain Operation . has Anonymous Access ( public Domain , ĠDomain Access . Owner )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : ĠsetUser Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġset Ġuser Ġaccess Ġinserts Ġnew Ġentry `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( user ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findBy UserId And Domain Id ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( User Domain Access ( user . id , Ġdomain . id , ĠDomain Access . Read )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcapture Ġaccess Ġsave ĊĠĠĠĠĠĠĠ Ġval Ġaccess Slot Ġ= Ġslot < User Domain Access >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . save ( capture ( access Slot )) Ġ} Ġanswers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġaccess Slot . captured Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġmethod ĊĠĠĠĠĠĠĠ Ġdomain Operation . setUser Access ( domain , Ġuser . id , ĠDomain Access . ReadWrite ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġaccess Ġis Ġset Ġcorrectly ĊĠĠĠĠĠĠĠ Ġassert ( access Slot . is Capt ured ) ĊĠĠĠĠĠĠĠ Ġassert ( access Slot . captured . access Ġ== ĠDomain Access . ReadWrite ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : ĠsetUser Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġset Ġuser Ġaccess Ġedits Ġexisting Ġentry `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( user ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findBy UserId And Domain Id ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcapture Ġaccess Ġsave ĊĠĠĠĠĠĠĠ Ġval Ġaccess Slot Ġ= Ġslot < User Domain Access >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . insert ( capture ( access Slot )) Ġ} Ġanswers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġaccess Slot . captured Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġmethod ĊĠĠĠĠĠĠĠ Ġdomain Operation . setUser Access ( domain , Ġuser . id , ĠDomain Access . Owner ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġnew Ġentry Ġcontains Ġcorrect Ġdata ĊĠĠĠĠĠĠĠ Ġassert ( access Slot . is Capt ured ) ĊĠĠĠĠĠĠĠ Ġval Ġaccess Ġ= Ġaccess Slot . captured ĊĊĠĠĠĠĠĠĠ Ġassert ( access . domain Id Ġ== Ġdomain . id ) ĊĠĠĠĠĠĠĠ Ġassert ( access . userId Ġ== Ġuser . id ) ĊĠĠĠĠĠĠĠ Ġassert ( access . access Ġ== ĠDomain Access . Owner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : ĠsetUser Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġset Ġuser Ġaccess Ġthrows Ġif Ġinvalid Ġuser `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġmethod Ġthrows Ġexception ĊĠĠĠĠĠĠĠ ĠassertThrows < User NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . setUser Access ( domain , Ġuser . id , ĠDomain Access . Owner ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : ĠsetUser Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġset Ġuser Ġaccess Ġworks Ġwith Ġdomain Id `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġspy k ( get Domain Operation ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns Ġand Ġcaptures ĊĠĠĠĠĠĠĠ Ġval Ġdomain Slot Ġ= Ġslot < Domain >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Operation . setUser Access ( capture ( domain Slot ), Ġany (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Repository . findById ( domain . id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( domain ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġmethod ĊĠĠĠĠĠĠĠ Ġdomain Operation . setUser Access ( domain . id , Ġuser . id , ĠDomain Access . Read ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġmethod Ġruns Ġwith Ġcorrect Ġparameters ĊĠĠĠĠĠĠĠ Ġassert ( domain Slot . is Capt ured ) ĊĠĠĠĠĠĠĠ Ġassert ( domain Slot . captured Ġ== Ġdomain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : ĠsetUser Access ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġset Ġuser Ġaccess Ġthrows Ġwith Ġinvalid Ġdomain Id `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġmock Ġreturns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġexception Ġis Ġthrown ĊĠĠĠĠĠĠĠ ĠassertThrows < Domain NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Operation . setUser Access ( domain . id , Ġuser . id , ĠDomain Access . Read ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod : Ġupdate Domain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġupdate Ġdomain Ġsets Ġnew Ġvalues `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Test User () ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġspy k ( get Domain Operation ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġmock Ġcall Ġto Ġsave Ġdomain ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Operation . save Domain ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġeach Ġsegment Ġonce Ġat Ġa Ġtime ĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request (" test 1 ", Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . name Ġ== Ġ" test 1 ") ĊĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġ" test 2 ", Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . description Ġ== Ġ" test 2 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtopic 1 Ġ= ĠObjectId . get () ĊĠĠĠĠĠĠĠ Ġval Ġtopic 2 Ġ= ĠObjectId . get () ĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġnull , ĠlistOf ( topic 1 , Ġtopic 2 ), Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠTo Do : Ġtopics Ġare Ġnot Ġyet Ġtested Ġhere , Ġbecause Ġthey Ġare Ġnot Ġupdate Ġwith Ġupdate Domain ĊĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġnull , Ġnull , Ġ" test 4 ", Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . ontology Prefix IR I Ġ== Ġ" test 4 ") ĊĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġnull , Ġnull , Ġnull , Ġ" test 5 ", Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . tools Tax onomy Root Ġ== Ġ" test 5 ") ĊĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġnull , Ġnull , Ġnull , Ġnull , ĠlistOf (" test 6 ", Ġ" test 7 "), Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . data Dimensions Tax onomy Roots Ġ== ĠlistOf (" test 6 ", Ġ" test 7 ")) ĊĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , ĠDomain Visibility . Private , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . visibility Ġ== ĠDomain Visibility . Private ) ĊĊĠĠĠĠĠĠĠ Ġdomain Operation . update Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Upload Request ( null , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( domain . strict Tools Annotations ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġget Ġusers Ġby Ġdomain Ġand Ġaccess Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġdomain Ġand Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġget Test Domain ( Domain Visibility . Private ) ĊĠĠĠĠĠĠĠ Ġval Ġuser 1 Ġ= ĠUser (" user 1 @ test . test ", Ġ" pass Test ", Ġ" user 1 ", ĠUser Status . Approved ) ĊĠĠĠĠĠĠĠ Ġval Ġuser 2 Ġ= ĠUser (" user 2 @ test . test ", Ġ" pass Test ", Ġ" user 2 ", ĠUser Status . Approved ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccess 1 Ġ= ĠUser Domain Access ( user 1 . id , Ġdomain . id , ĠDomain Access . Owner ) ĊĠĠĠĠĠĠĠ Ġval Ġaccess 2 Ġ= ĠUser Domain Access ( user 2 . id , Ġdomain . id , ĠDomain Access . ReadWrite ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findAll By Domain Id And Access ( domain . id , ĠDomain Access . Owner ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( access 1 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findAll By Domain Id And Access ( domain . id , ĠDomain Access . ReadWrite ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( access 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġspy k ( get Domain Operation ()) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdomain Operation . get Users By Domain And Access ( domain . id , ĠlistOf ( Domain Access . Owner , ĠDomain Access . ReadWrite )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġresult . size ) ĊĠĠĠĠĠĠĠ Ġassert ( result . contains All ( listOf ( access 1 , Ġaccess 2 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerform Ġupdate Ġwith ĠDomain Repository . save () Ġwith Ġall Ġoptions Ġin Ġauthorization ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġperform Domain Update For Authorized User ( domain : ĠDomain , Ġuser : ĠUser , Ġdomain Slot : ĠCapt uring Slot < Domain >, Ġauthor izations : ĠCollection < Domain Access >, Ġoperation : Ġ( Domain Operation ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġdomain Operation Ġ= Ġget Domain Operation () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġall Ġauthorized Ġoptions Ġfor Ġsaving Ġa Ġdomain ĊĠĠĠĠĠĠĠ Ġfor Ġ( test Access Ġin Ġauthor izations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmock Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository . findById ( any ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( user ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Domain Access Repository . findBy UserId And Domain Id ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( User Domain Access ( user . id , Ġdomain . id , Ġtest Access )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdomain Repository . save ( capture ( domain Slot )) Ġ} Ġanswers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdomain Slot . captured Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation ( domain Operation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġtest Ġdomain Ġwith Ġdefault Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Test Domain ( visibility : ĠDomain Visibility Ġ= ĠDomain Visibility . Public ): ĠDomain Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDomain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" domain Test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" description Test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ontology Test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" taxonomy Test ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" data Test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġtest Ġuser Ġwith Ġdefault Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Test User (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" user @ test . test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pass Test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" display Test ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Status . Approved ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ