package Ġpl . gw yn der . general . data . storage . repositories . strategy . saving Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġpl . gw yn der . general . data . storage . entities . DataStore Context Ċ import Ġpl . gw yn der . general . data . storage . entities . Mock DataStore Entity Ċ import Ġpl . gw yn der . general . data . storage . files . DataStore File Ċ import Ġpl . gw yn der . general . data . storage . files . DataStore File Service Ċ import Ġpl . gw yn der . general . data . storage . parsers . DataStore Entity Parser Ċ import Ġpl . gw yn der . general . data . storage . parsers . Id Generator Ċ import Ġpl . gw yn der . general . data . storage . repositories . strategy . DATA _ FILE Ċ import Ġpl . gw yn der . general . data . storage . repositories . strategy . ENT ITIES Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ Ċ internal Ġclass ĠSingle File DataStore Saving Strategy Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= ĠData Store Context ( Mock DataStore Entity :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġnew Id Ġ= Ġ" new Id " ĊĠĠĠ Ġprivate Ġval Ġid Generator Ġ= Ġmock < Id Generator > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġnew Id () Ġ} Ġdo Return Ġnew Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinput Ġ= Ġmock < InputStream >() ĊĠĠĠ Ġprivate Ġval Ġoutput Ġ= Ġmock < OutputStream >() ĊĠĠĠ Ġprivate Ġval Ġfile Ġ= Ġmock < DataStore File > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġinput () Ġ} Ġdo Return Ġinput ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġoutput () Ġ} Ġdo Return Ġoutput ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġexists () Ġ} Ġdo Return Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfile Service Ġ= Ġmock < DataStore File Service > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġjson ( ENT ITIES , Ġcontext . name , ĠDATA _ FILE ) Ġ} Ġdo Return Ġfile ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġentity Id Ġ= Ġ" entity " ĊĠĠĠ Ġprivate Ġval Ġentity Ġ= ĠMock DataStore Entity ( entityId ) ĊĠĠĠ Ġprivate Ġval Ġanother Id Ġ= Ġ" another " ĊĠĠĠ Ġprivate Ġval Ġanother Ġ= ĠMock DataStore Entity ( another Id ) ĊĠĠĠ Ġprivate Ġval Ġentities Ġ= Ġset Of ( entity , Ġanother ) ĊĊĠĠĠ Ġprivate Ġval Ġnew Entity Ġ= ĠMock DataStore Entity ( null ) ĊĊĠĠĠ Ġprivate Ġval Ġparser Ġ= Ġmock < DataStore Entity Parser > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġread All ( input , Ġcontext . entity Class ) Ġ} Ġdo Return Ġentities ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtest Ġ= ĠSingle File DataStore Saving Strategy ( file Service , Ġparser , Ġid Generator , Ġcontext ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest . create ( new Entity ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . id ). isEqualTo ( new Id ) ĊĠĠĠĠĠĠĠ Ġverify ( parser ). write All ( eq ( output ), Ġarg That Ġ{ Ġcontains ( result ) Ġ}, Ġeq ( context . entity Class )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest . update ( entityId , Ġnew Entity ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( new Entity ) ĊĠĠĠĠĠĠĠ Ġverify ( parser ). write All ( eq ( output ), Ġarg That Ġ{ Ġcontains ( result ) Ġ}, Ġeq ( context . entity Class )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest . remove ( entityId ) ĊĠĠĠĠĠĠĠ Ġverify ( parser ). write All ( eq ( output ), Ġarg That Ġ{ Ġ! contains ( entity ) Ġ}, Ġeq ( context . entity Class )) ĊĠĠĠ Ġ} Ċ Ċ } Ċ