package Ġcom . r 3 . cord a . lib . chat . workflows . test Ċ Ċ import Ġcom . r 3 . cord a . lib . chat . contracts . states . Chat Meta Info Ċ import Ġcom . r 3 . cord a . lib . chat . workflows . flows . Add Participants Flow Ċ import Ġcom . r 3 . cord a . lib . chat . workflows . flows . Create Chat 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 ĠAdd 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 . 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 Ġadd Ġparticipants Ġto Ġa Ġchat `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 Ġcreate Ġone ĊĠĠĠĠĠĠĠ Ġval Ġnew Chat Flow Ġ= Ġnode A . start Flow ( Create Chat Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" content ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiv ers Ġ= ĠlistOf ( node B . info . legal Id entities . single ()) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġnew Chat Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġold Chat Meta A Ġ= Ġnode A . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġold Chat Meta B Ġ= Ġnode B . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġadd Ġnew Ġparticipants ĊĠĠĠĠĠĠĠ Ġval Ġadd Participants Flow Ġ= Ġnode A . start Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Participants Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Add Ġ= ĠlistOf ( node C . info . legal Id entities . single ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id Ġ= Ġold Chat Meta A . linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġadd Participants Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ// Ġold ĠMeta Info Ġis Ġconsumed Ġin ĠA , B , Ġand Ġnew Ġone Ġshould Ġbe Ġin ĠA , B Ġand ĠC ĊĠĠĠĠĠĠĠ Ġval Ġchat Meta A Ġ= Ġnode A . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġchat Meta B Ġ= Ġnode B . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġchat Meta C Ġ= Ġnode C . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (( chat Meta A . re ceiv ers Ġ- Ġchat Meta B . re ceiv ers ). isEmpty ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (( chat Meta B . re ceiv ers Ġ- Ġchat Meta C . re ceiv ers ). isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Participants Ġ= Ġold Chat Meta A . re ceiv ers Ġ+ Ġnode C . info . legal Id entities . single () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (( chat Meta C . re ceiv ers Ġ- Ġexpected Participants ). size , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (( expected Participants Ġ- Ġchat Meta C . re ceiv ers ). size , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( chat Meta A . linear Id , Ġchat Meta B . linear Id , Ġchat Meta C . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Chat Meta A . linear Id , Ġold Chat Meta 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 Chat Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" content ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiv ers Ġ= ĠlistOf ( node B . info . legal Id entities . single ()) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġnew Chat Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġold Chat Meta A Ġ= Ġnode A . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġold Chat Meta B Ġ= Ġnode B . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġadd Ġnew Ġparticipants ĊĠĠĠĠĠĠĠ Ġval Ġadd Participants Flow Ġ= Ġnode A . start Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Participants Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Add Ġ= ĠlistOf ( node C . info . legal Id entities . single ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id Ġ= Ġold Chat Meta A . linear Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġadd Participants Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ// Ġold ĠMeta Info Ġis Ġconsumed Ġin ĠA , B , Ġand Ġnew Ġone Ġshould Ġbe Ġin ĠA , B Ġand ĠC ĊĠĠĠĠĠĠĠ Ġval Ġchat Meta A Ġ= Ġnode A . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġchat Meta B Ġ= Ġnode B . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġval Ġchat Meta C Ġ= Ġnode C . services . vault Service . query By ( Chat Meta Info :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Participants Ġ= Ġold Chat Meta A . re ceiv ers Ġ+ Ġnode C . info . legal Id entities . single () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġfollowing Ġtests Ġare Ġbased Ġon Ġ" state Ġmachine " Ġconstr ains ĊĠĠĠĠĠĠĠ Ġ// Ġlinear Id Ġand Ġsubject Ġmust Ġnot Ġchange ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( chat Meta A . linear Id , Ġchat Meta B . linear Id , Ġchat Meta C . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Chat Meta A . linear Id , Ġold Chat Meta B . linear Id ). distinct (). size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( chat Meta A . subject , Ġchat Meta B . subject , Ġchat Meta C . subject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Chat Meta A . subject , Ġold Chat Meta B . subject ). distinct (). size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreated Ġtime Ġmust Ġchange ĊĠĠĠĠĠĠĠ Ġval Ġnew Chat Date Ġ= Ġchat Meta A . created ĊĠĠĠĠĠĠĠ Ġval Ġold Chat Date Ġ= Ġold Chat Meta A . created ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( old Chat Date Ġ< Ġnew Chat Date ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadmins Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Meta A . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Meta B . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Meta C . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Chat Meta A . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Chat Meta B . admin ĊĠĠĠĠĠĠĠ Ġ). distinct () ĊĊĠĠĠĠĠĠĠ Ġ// Ġadmin Ġmust Ġnot Ġchange ĊĠĠĠĠĠĠĠ Ġ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 ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( chat Meta A . re ceiv ers , Ġchat Meta B . re ceiv ers ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( chat Meta A . re ceiv ers , Ġchat Meta C . re ceiv ers ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (( chat Meta C . re ceiv ers Ġ- Ġexpected Participants ). size , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (( expected Participants Ġ- Ġchat Meta C . re ceiv ers ). size , Ġ 0 ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ