package Ġcom . work day . redux Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . never Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . times Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertFalse Ċ import Ġorg . junit . Assert . assertNotNull Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠSingle Th readed Store Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠinitialState Ġ= ĠMock State () ĊĠĠĠ Ġprivate Ġval Ġreducer Ġ= ĠMock Reducer () ĊĠĠĠ Ġprivate Ġval Ġdis posable Ġ= Ġmock < Disposable >() ĊĠĠĠ Ġprivate Ġval Ġdispatch ing Middleware Ġ= ĠMock Dispatch ing Middleware ( dis posable ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstore : ĠSingle Th readed Store < Mock State , ĠMock Action > ĊĊĠĠĠ Ġ@ Before Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġstore Ġ= ĠSingle Th readed Store ( state Ġ= ĠinitialState , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmiddleware Ġ= ĠlistOf ( dispatch ing Middleware )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` WHEN Ġstore Ġinitialized ĠTHEN Ġno Ġsubscriptions `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġstore . subscriptions . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġinitialized ĠWHEN Ġstore Ġsubscribed Ġto ĠTHEN Ġreturns Ġunsubscribe Ġlambda `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe Ġ= Ġstore . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( unsubscribe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġinitialized ĠWHEN Ġstore Ġsubscribed Ġto ĠTHEN Ġcorrect Ġnumber Ġof Ġsubscriptions `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġstore . subscriptions . size ) ĊĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġstore . subscriptions . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġinitialized ĠWHEN Ġstore Ġsubscribed Ġto Ġmultiple Ġtimes ĠTHEN Ġcorrect Ġnumber Ġof Ġsubscriptions `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġstore . subscriptions . size ) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġstore . subscriptions . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġsubscribed Ġto ĠWHEN Ġunsubscribe ĠTHEN Ġcorrect Ġnumber Ġof Ġsubscriptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe Ġ= Ġstore . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġunsubscribe . invoke () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġstore . subscriptions . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġtwo Ġsubscribers ĠWHEN Ġone Ġun sub scri bes ĠTHEN Ġdoes Ġnot Ġcall Ġdispose Ġon Ġmiddleware `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmiddleware 1 Ġ= Ġmock < Middleware < Mock State , ĠMock Action >>() ĊĠĠĠĠĠĠĠ Ġval Ġmiddleware 2 Ġ= Ġmock < Middleware < Mock State , ĠMock Action >>() ĊĠĠĠĠĠĠĠ Ġval Ġsimple Store Ġ= ĠSingle Th readed Store ( state Ġ= ĠinitialState , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġmock (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmiddleware Ġ= ĠlistOf ( middleware 1 , Ġmiddleware 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe 1 Ġ= Ġsimple Store . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsimple Store . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġunsubscribe 1 . invoke () ĊĊĠĠĠĠĠĠĠ Ġverify ( middleware 1 , Ġtimes ( 0 )). dispose () ĊĠĠĠĠĠĠĠ Ġverify ( middleware 2 , Ġtimes ( 0 )). dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġtwo Ġsubscribers ĠWHEN Ġlast Ġsubscriber Ġun sub scri bes ĠTHEN Ġcalls Ġdispose Ġon Ġall Ġmiddleware `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmiddleware 1 Ġ= Ġmock < Middleware < Mock State , ĠMock Action >>() ĊĠĠĠĠĠĠĠ Ġval Ġmiddleware 2 Ġ= Ġmock < Middleware < Mock State , ĠMock Action >>() ĊĠĠĠĠĠĠĠ Ġval Ġsimple Store Ġ= ĠSingle Th readed Store ( state Ġ= ĠinitialState , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġmock (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmiddleware Ġ= ĠlistOf ( middleware 1 , Ġmiddleware 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe 1 Ġ= Ġsimple Store . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe 2 Ġ= Ġsimple Store . subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġunsubscribe 1 . invoke () ĊĠĠĠĠĠĠĠ Ġunsubscribe 2 . invoke () ĊĊĠĠĠĠĠĠĠ Ġverify ( middleware 1 ). dispose () ĊĠĠĠĠĠĠĠ Ġverify ( middleware 2 ). dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġsubscribed Ġto ĠWHEN Ġdispatch Ġupdate Ġaction ĠTHEN Ġupdates Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState : ĠMock State ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 1 ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . invoke ( Mock Action . Update 1 Action ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( newState . updated 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġsubscribed Ġto ĠWHEN Ġdispatch Ġno Ġupdate Ġaction ĠTHEN Ġdoes Ġnot Ġupdate Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState : ĠMock State ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdispatcher . invoke ( Mock Action . No Update Action ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġsubscribed Ġto Ġand Ġun subscribed Ġto ĠWHEN Ġdispatch Ġupdate Ġaction ĠTHEN Ġstate Ġis Ġnot Ġupdated Ġfor Ġthis Ġsubscription `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState : ĠMock State ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe Ġ= Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġunsubscribe . invoke () ĊĊĠĠĠĠĠĠĠ Ġdispatcher . invoke ( Mock Action . Update 1 Action ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġsubscribed Ġto Ġin Ġmultiple Ġplaces ĠWHEN Ġdispatch Ġmultiple Ġupdate Ġactions ĠTHEN Ġupdates Ġstate Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher 1 : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher 2 : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState : ĠMock State ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġ_, Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher 1 Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher 2 Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 2 ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher 1 . invoke ( Mock Action . Update 1 Action ) ĊĠĠĠĠĠĠĠ Ġdispatcher 2 . invoke ( Mock Action . Update 2 Action ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( newState . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( newState . updated 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġone Ġsubscription Ġsubscribed Ġand Ġone Ġsubscription Ġun subscribed ĠWHEN Ġdispatch Ġupdate Ġaction Ġfrom Ġsubscribed ĠTHEN Ġstate Ġupdates Ġsubscribed Ġsubscription `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState 1 : ĠMock State ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState 2 : ĠMock State ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState 1 Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe Ġ= Ġstore . subscribe Ġ{ Ġstate , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState 2 Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġunsubscribe . invoke () ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState 1 . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState 2 . updated 1 ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . invoke ( Mock Action . Update 1 Action ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( newState 1 . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState 2 . updated 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġone Ġsubscription Ġsubscribed Ġand Ġone Ġsubscription Ġun subscribed ĠWHEN Ġdispatch Ġupdate Ġaction Ġfrom Ġun subscribed ĠTHEN Ġstate Ġupdates Ġsubscribed Ġsubscription `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState 1 : ĠMock State ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState 2 : ĠMock State ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġstate , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState 1 Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe Ġ= Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState 2 Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġunsubscribe . invoke () ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState 1 . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState 2 . updated 1 ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . invoke ( Mock Action . Update 1 Action ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( newState 1 . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState 2 . updated 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` G IV EN Ġstore Ġwith Ġdispatch ing Ġmiddleware ĠWHEN Ġdispatch Ġupdate Ġaction ĠTHEN Ġmiddleware Ġdis patches Ġto Ġupdate Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġdispatcher : ĠDispatch < Mock Action > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠnewState : ĠMock State ĊĠĠĠĠĠĠĠ Ġstore . subscribe Ġ{ Ġstate , Ġdispatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġdispatch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( newState . middleware Called ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . invoke ( Mock Action . Update 1 Action ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( newState . updated 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( newState . middleware Called ) ĊĠĠĠ Ġ} Ċ } Ċ