package Ġcom . r 3 . cord a . lib . chat . workflows . test Ċ Ċ import Ġcom . r 3 . cord a . lib . chat . contracts . states . Chat Session Info Ċ import Ġcom . r 3 . cord a . lib . chat . workflows . flows . Create Session Flow Ċ import Ġcom . r 3 . cord a . lib . chat . workflows . flows . Remove Participants Flow Ċ import Ġcom . r 3 . cord a . lib . chat . workflows . test . observer . Observer Utils Ċ import Ġnet . cord a . core . utilities . get OrThrow Ċ import Ġnet . cord a . testing . common . internal . test Network Parameters Ċ import Ġnet . cord a . testing . node . Mock Network Ċ import Ġnet . cord a . testing . node . Mock Network Parameters Ċ import Ġnet . cord a . testing . node . Started Mock Node Ċ import Ġnet . cord a . testing . node . Test C ord app Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠRemove Participants Flow Tests Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġnetwork : ĠMock Network ĊĠĠĠ Ġlateinit Ġvar Ġnode A : ĠStarted Mock Node ĊĠĠĠ Ġlateinit Ġvar Ġnode B : ĠStarted Mock Node ĊĠĠĠ Ġlateinit Ġvar Ġnode C : ĠStarted Mock Node ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork Ġ= ĠMock Network ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Network Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Parameters Ġ= Ġtest Network Parameters ( minimum Platform Version Ġ= Ġ 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ord apps ForAll Nodes Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . r 3 . cord a . lib . tokens . contracts "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . r 3 . cord a . lib . tokens . workflows "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . r 3 . cord a . lib . chat . contracts "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . r 3 . cord a . lib . chat . workflows ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnode A Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġnode B Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġnode C Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ ĠObserver Utils . register Observer ( listOf ( node A , Ġnode B , Ġnode C )) ĊĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork . stop Nodes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbe Ġpossible Ġto Ġremove Ġparticipants Ġfrom Ġa Ġchat `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 Ġcreate Ġone ĊĠĠĠĠĠĠĠ Ġval Ġnew Chat Flow Ġ= Ġnode A . start Flow ( Create Session Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" content ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiv ers Ġ= ĠlistOf ( node B . info . legal Id entities . single (), Ġnode C . info . legal Id entities . single ()) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġnew Chat Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġchat In B Ġ= Ġnode B . services . vault Service . query By ( Chat Session Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġremove Ġparticipants ĊĠĠĠĠĠĠĠ Ġval Ġremove Participants Flow Ġ= Ġnode A . start Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemove Participants Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Remove Ġ= ĠlistOf ( node C . info . legal Id entities . single ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id Ġ= Ġchat In B . linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġremove Participants Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ// ĠA Ġand ĠB Ġshould Ġhave Ġsession Ġinfo Ġwhile ĠC Ġshould Ġnot Ġhave ĊĠĠĠĠĠĠĠ Ġval Ġsession State Ref A Ġ= Ġnode A . services . vault Service . query By ( Chat Session Info :: class . java ). states ĊĠĠĠĠĠĠĠ Ġval Ġsession State Ref B Ġ= Ġnode B . services . vault Service . query By ( Chat Session Info :: class . java ). states ĊĠĠĠĠĠĠĠ Ġval Ġsession State Ref C Ġ= Ġnode C . services . vault Service . query By ( Chat Session Info :: class . java ). states ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( session State Ref A . size , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( session State Ref B . size , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( session State Ref C . size , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsession A Ġ= Ġsession State Ref A . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġsession B Ġ= Ġsession State Ref B . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġval Ġold Participants Ġ= Ġchat In B . participants ĊĠĠĠĠĠĠĠ Ġval Ġexpected Participants Ġ= Ġold Participants Ġ- Ġnode C . info . legal Id entities . single () ĊĠĠĠĠĠĠĠ Ġval Ġnew Participants Ġ= Ġsession A . participants ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( expected Participants . size Ġ== Ġnew Participants . size ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (( expected Participants Ġ- Ġnew Participants ). isEmpty ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (( new Participants Ġ- Ġexpected Participants ). isEmpty ()) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( session A . linear Id , Ġsession B . linear Id ). distinct (). size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` add Ġparticipants Ġshould Ġfollow Ġconstr ain `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 Ġcreate Ġone ĊĠĠĠĠĠĠĠ Ġval Ġnew Chat Flow Ġ= Ġnode A . start Flow ( Create Session Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" content ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiv ers Ġ= ĠlistOf ( node B . info . legal Id entities . single (), Ġnode C . info . legal Id entities . single ()) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġnew Chat Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġold Session A Ġ= Ġnode A . services . vault Service . query By ( Chat Session Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġold Session B Ġ= Ġnode B . services . vault Service . query By ( Chat Session Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġold Session C Ġ= Ġnode C . services . vault Service . query By ( Chat Session Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġremove Ġparticipants ĊĠĠĠĠĠĠĠ Ġval Ġremove Participants Flow Ġ= Ġnode A . start Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemove Participants Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Remove Ġ= ĠlistOf ( node C . info . legal Id entities . single ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id Ġ= Ġold Session A . linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġremove Participants Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġsession A Ġ= Ġnode A . services . vault Service . query By ( Chat Session Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġsession B Ġ= Ġnode B . services . vault Service . query By ( Chat Session Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġfollowing Ġtests Ġare Ġbased Ġon Ġ" state Ġmachine " Ġconstr ains ĊĠĠĠĠĠĠĠ Ġ// Ġlinear Id Ġand Ġsubject Ġmust Ġnot Ġchange ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( session A . linear Id , Ġsession B . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Session A . linear Id , Ġold Session B . linear Id , Ġold Session C . linear Id ). distinct (). size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( session A . subject , Ġsession B . subject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Session A . subject , Ġold Session B . subject , Ġold Session C . subject ). distinct (). size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġadmin Ġmust Ġnot Ġchange ĊĠĠĠĠĠĠĠ Ġval Ġadmins Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession A . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession B . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Session A . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Session B . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Session C . admin ĊĠĠĠĠĠĠĠ Ġ). distinct () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( admins . size , Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġadmin Ġmust Ġbe Ġthe Ġinit iator ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( node A . info . legal Id entities . single (), Ġadmins . single ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreceiv ers Ġlist Ġmust Ġchange Ġto Ġnew Ġparticipants ĊĠĠĠĠĠĠĠ Ġval Ġold Re ceiv ers Ġ= Ġold Session A . re ceiv ers ĊĠĠĠĠĠĠĠ Ġval Ġexpected Re ceiv ers Ġ= Ġold Re ceiv ers Ġ- Ġnode C . info . legal Id entities . single () ĊĠĠĠĠĠĠĠ Ġval Ġnew Re ceiv ers A Ġ= Ġsession A . re ceiv ers ĊĠĠĠĠĠĠĠ Ġval Ġnew Re ceiv ers B Ġ= Ġsession B . re ceiv ers ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( new Re ceiv ers A , Ġnew Re ceiv ers B ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (( new Re ceiv ers A Ġ- Ġexpected Re ceiv ers ). size , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (( expected Re ceiv ers Ġ- Ġnew Re ceiv ers A ). size , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ