package Ġcover os R 3 z . timer ec ording . api Ċ Ċ import Ġcover os R 3 z . authentication . types . SYSTEM _ USER Ċ import Ġcover os R 3 z . authentication . types . User Ċ import Ġcover os R 3 z . authentication . utility . Fake Authentication Utilities Ċ import Ġcover os R 3 z . server . AP ITest Category Ċ import Ġcover os R 3 z . server . api . Message API Ċ import Ġcover os R 3 z . server . types . Post Body Data Ċ import Ġcover os R 3 z . server . types . Server Data Ċ import Ġcover os R 3 z . server . types . StatusCode Ċ import Ġcover os R 3 z . system . misc .* Ċ import Ġcover os R 3 z . system . misc . exceptions . In exact Inputs Exception Ċ import Ġcover os R 3 z . timer ec ording . Fake Time Recording Utilities Ċ import Ġcover os R 3 z . timer ec ording . types .* Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . experimental . categories . Category Ċ Ċ @ Category ( AP ITest Category :: class ) Ċ class ĠProject AP IT ests Ġ{ ĊĊĊĠĠĠ Ġlateinit Ġvar Ġau Ġ: ĠFake Authentication Utilities ĊĠĠĠ Ġlateinit Ġvar Ġtr u Ġ: ĠFake Time Recording Utilities ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġau Ġ= ĠFake Authentication Utilities () ĊĠĠĠĠĠĠĠ Ġtr u Ġ= ĠFake Time Recording Utilities () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġbasic Ġhappy Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Handle POST New Project () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPost Body Data ( map Of ( Project API . Elements . PROJECT _ INPUT . get Elem Name () Ġto ĠDEFAULT _ PROJECT _ NAME . value )) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( data ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . SE E _ OTHER , ĠProject API . handle Post ( sd ). statusCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠH uge Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Handle POST New Project _ H uge Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠMessage API . create Custom Message Redirect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Max Ġsize Ġof Ġproject Ġname Ġis Ġ$ max ProjectName Size ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject API . path ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPost Body Data ( map Of ( Project API . Elements . PROJECT _ INPUT . get Elem Name () Ġto Ġ" a ". repeat ( max ProjectName Size Ġ+ Ġ 1 ))) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Post ( sd ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBig Ġname , Ġbut Ġacceptable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Handle POST New Project _ Big Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPost Body Data ( map Of ( Project API . Elements . PROJECT _ INPUT . get Elem Name () Ġto Ġ" a ". repeat ( max ProjectName Size ))) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( data ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . SE E _ OTHER , ĠProject API . handle Post ( sd ). statusCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMissing Ġdata ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Handle POST New Project _ no Body () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data ()) ĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= ĠassertThrows ( In exact Inputs Exception :: class . java ){ Ġ ĠProject API . handle Post ( sd ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" expected Ġkeys : Ġ[ project _ name ]. Ġreceived Ġkeys : Ġ[] ", Ġex . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠRO LES ĠTEST S ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShould Ġonly Ġallow Ġthe Ġadmin Ġto Ġpost ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Allow Admin For Post () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPost Body Data ( map Of ( Project API . Elements . PROJECT _ INPUT . get Elem Name () Ġto ĠDEFAULT _ PROJECT _ NAME . value )) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( data ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . SE E _ OTHER , ĠProject API . handle Post ( sd ). statusCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThere 's Ġno Ġneed Ġfor Ġthe Ġsystem Ġrole Ġto Ġcreate Ġprojects ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow System For Post () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data (), Ġuser Ġ= ĠSYSTEM _ USER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Post ( sd ). statusCode ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . FOR BID DEN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis allow Ġappro vers Ġto Ġcreate Ġprojects ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow Approver For Post () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data (), Ġuser Ġ= ĠDEFAULT _ APPRO VER _ USER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Post ( sd ). statusCode ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . FOR BID DEN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis allow Ġregular Ġroles Ġto Ġcreate Ġprojects ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow Regular Role For Post () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data (), Ġuser Ġ= ĠDEFAULT _ REG ULAR _ USER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Post ( sd ). statusCode ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . FOR BID DEN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOnly Ġthe Ġadmin Ġcan Ġview Ġthis Ġpage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Allow Admin For Get () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPost Body Data ( map Of ( Project API . Elements . PROJECT _ INPUT . get Elem Name () Ġto ĠDEFAULT _ PROJECT _ NAME . value )) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( data ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . OK , ĠProject API . handle Get ( sd ). statusCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis allow Ġthe Ġsystem Ġrole Ġfrom Ġviewing Ġthis Ġpage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow System For Get () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data (), Ġuser Ġ= ĠSYSTEM _ USER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Get ( sd ). statusCode ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . FOR BID DEN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis allow Ġappro vers Ġseeing Ġthis Ġpage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow Approver For Get () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data (), Ġuser Ġ= ĠDEFAULT _ APPRO VER _ USER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Get ( sd ). statusCode ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . FOR BID DEN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis allow Ġregular Ġusers Ġviewing Ġthis Ġpage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow Regular Role For Get () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( Post Body Data (), Ġuser Ġ= ĠDEFAULT _ REG ULAR _ USER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Get ( sd ). statusCode ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( StatusCode . FOR BID DEN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe 'll Ġtrim Ġthe Ġinput Ġ- Ġch op Ġoff Ġthe Ġwhitespace Ġbefore Ġand ĊĠĠĠĠ Ġ* Ġafter , Ġand Ġmake Ġsure Ġto Ġdis allow Ġduplicates Ġfrom Ġthat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Should Dis allow Duplicate Names After Tri mm ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessage API . create Enum Message Redirect ( Message API . Message . FAILED _ CREATE _ PROJECT _ DUPLIC ATE ) ĊĠĠĠĠĠĠĠ Ġtr u . find Project ByName Behavior Ġ= Ġ{ ĠProject ( ProjectId ( 1 ), ĠProject Name (" abc 1 2 3 ")) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPost Body Data ( map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject API . Elements . PROJECT _ INPUT . get Elem Name () Ġto Ġ" ĠĠ Ġabc 1 2 3 ĠĠ Ġ")) ĊĠĠĠĠĠĠĠ Ġval Ġsd Ġ= Ġmake P Server Data ( data ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProject API . handle Post ( sd ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġmake P Server Data ( data : ĠPost Body Data , Ġuser : ĠUser Ġ= ĠDEFAULT _ ADMIN _ USER ): ĠServer Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmake Server Data ( data , Ġtr u , Ġau , Ġuser Ġ= Ġuser , Ġpath Ġ= ĠProject API . path ) ĊĠĠĠ Ġ} Ċ }