/** Ċ Ġ* Ġ ĠList Entity Validator Test . kt Ċ Ġ* Ġ ĠVe jd ire ktor ate t SDK Ċ Ġ* Ċ Ġ* Ġ ĠCreated Ġby ĠS Ã¸ ren ĠK ro gh ĠS Ã¸ ren sen Ġon Ġ 2 0 1 9 - 1 2 - 0 2 . Ċ Ġ* Ġ ĠCopyright ĠÂ© Ġ 2 0 1 9 ĠVe jd ire ktor ate t . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġdk . ve jd ire ktor ate t . ve jd ire ktor ate ts dk Ċ Ċ import Ġdk . ve jd ire ktor ate t . ve jd ire ktor ate ts dk . entity . Road work Ċ import Ġdk . ve jd ire ktor ate t . ve jd ire ktor ate ts dk . entity . Traffic Ċ import Ġdk . ve jd ire ktor ate t . ve jd ire ktor ate ts dk . utils . Utils Ċ import Ġorg . json . JSONObject Ċ import Ġkotlin . test . Test Ċ Ċ class ĠList Entity Validator Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġvalid ĠTraffic Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠTraffic . Traffic Validator (). validate ( JSONObject ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠMissing Required Field Exception :: class ) ĊĠĠĠ Ġfun Ġ` test Ġinvalid ĠTraffic Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ"{} " ĊĊĠĠĠĠĠĠĠ ĠTraffic . Traffic Validator (). validate ( JSONObject ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġmissing ĠTraffic Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠTraffic . Traffic Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Heading Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Description Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Tag Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing EntityType Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Timestamp Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Heading Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Description Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Tag Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing EntityType Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Timestamp Entity , Ġvalidator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġnull ĠTraffic Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠTraffic . Traffic Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Heading Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Description Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Tag Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull EntityType Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Timestamp Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Heading Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Description Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Tag Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null EntityType Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Timestamp Entity , Ġvalidator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠInc orrect Value Exception :: class ) ĊĠĠĠ Ġfun Ġ` test Ġinvalid ĠTraffic ĠEntityType `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ" invalid Ġentity Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠTraffic . Traffic Validator (). validate ( JSONObject ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠTraffic Ġempty Ġbounds Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠTraffic . Traffic Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġno Bounds Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Bounds Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bounds ": Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġvalidator . validate ( JSONObject ( no Bounds Entity )) ĊĠĠĠĠĠĠĠ Ġvalidator . validate ( JSONObject ( null Bounds Entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠTraffic Ġinvalid Ġtimestamp Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ TRA FF IC }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 Ġ 0 9 : 2 0 : 2 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Illegal DateFormat Exception >( entity , ĠTraffic . Traffic Validator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġvalid ĠRoad work Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bounds ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" south West ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lat ": Ġ 5 5 . 7 0 7 1 3 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lng ": 1 2 . 5 8 9 5 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" north East ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lat ": 5 5 . 7 0 7 2 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lng ": 1 2 . 5 9 0 9 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠRoad work . Road work Validator (). validate ( JSONObject ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠMissing Required Field Exception :: class ) ĊĠĠĠ Ġfun Ġ` test Ġinvalid ĠRoad work Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ"{} " ĊĊĠĠĠĠĠĠĠ ĠRoad work . Road work Validator (). validate ( JSONObject ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġmissing ĠRoad work Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠRoad work . Road work Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Heading Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Description Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Tag Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing EntityType Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Timestamp Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Heading Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Description Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Tag Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing EntityType Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Field Exception >( missing Timestamp Entity , Ġvalidator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġnull ĠRoad work Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠRoad work . Road work Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Heading Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Description Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Tag Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull EntityType Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Timestamp Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Heading Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Description Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Tag Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null EntityType Entity , Ġvalidator ) ĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Missing Required Value Exception >( null Timestamp Entity , Ġvalidator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠInc orrect Value Exception :: class ) ĊĠĠĠ Ġfun Ġ` test Ġinvalid ĠRoad work ĠEntityType `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ" invalid Ġentity Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠRoad work . Road work Validator (). validate ( JSONObject ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠRoad work Ġempty Ġbounds Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠRoad work . Road work Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġno Bounds Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġval Ġnull Bounds Entity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 T 0 9 : 2 0 : 2 6 . 0 0 0 + 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bounds ": Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ Ġvalidator . validate ( JSONObject ( no Bounds Entity )) ĊĠĠĠĠĠĠĠ Ġvalidator . validate ( JSONObject ( null Bounds Entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠRoad work Ġinvalid Ġtimestamp Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" heading ": Ġ" heading Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ" description Text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag ": Ġ" Unique Tag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entity Type ": Ġ"${ Constants . LAT EX _ RO AD WORK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp ": Ġ" 2 0 1 9 - 0 9 - 1 2 Ġ 0 9 : 2 0 : 2 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠĠĠĠĠ ĠUtils . assert Throw Exception < Illegal DateFormat Exception >( entity , ĠRoad work . Road work Validator ()) ĊĠĠĠ Ġ} Ċ } Ċ