@@ -36,10 +36,10 @@ public function testLockMiddlewareIgnoreIfMessageIsNotLockable()
3636 $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
3737 }
3838
39- public function testLockMiddlewareIfMessageHasKey ()
39+ public function testLockMiddlewareIfMessageHasKeyWithFirstMode ()
4040 {
4141 $ message = new DummyMessage ('Hello ' );
42- $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_DISCARD , 'id ' )]);
42+ $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE , 'id ' )]);
4343
4444 if (SemaphoreStore::isSupported ()) {
4545 $ store = new SemaphoreStore ();
@@ -53,7 +53,7 @@ public function testLockMiddlewareIfMessageHasKey()
5353 $ this ->assertNotNull ($ envelope ->last (LockStamp::class));
5454
5555 $ message2 = new DummyMessage ('Hello ' );
56- $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_DISCARD , 'id ' )]);
56+ $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE , 'id ' )]);
5757
5858 $ decorator ->handle ($ envelope2 , $ this ->getStackMock (false ));
5959
@@ -62,7 +62,68 @@ public function testLockMiddlewareIfMessageHasKey()
6262 $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
6363
6464 $ message3 = new DummyMessage ('Hello ' );
65- $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_DISCARD , 'id ' )]);
65+ $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE , 'id ' )]);
66+ $ decorator ->handle ($ envelope3 , $ this ->getStackMock (true ));
67+ }
68+
69+ public function testLockMiddlewareIfMessageHasKeyWithSecondMode ()
70+ {
71+ $ message = new DummyMessage ('Hello ' );
72+ $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE_OR_PROCESS , 'id ' )]);
73+
74+ if (SemaphoreStore::isSupported ()) {
75+ $ store = new SemaphoreStore ();
76+ } else {
77+ $ store = new FlockStore ();
78+ }
79+
80+ $ decorator = new LockMiddleware (new LockFactory ($ store ));
81+
82+ $ envelope = $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
83+ $ this ->assertNotNull ($ envelope ->last (LockStamp::class));
84+
85+ $ message2 = new DummyMessage ('Hello ' );
86+ $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE_OR_PROCESS , 'id ' )]);
87+
88+ $ decorator ->handle ($ envelope2 , $ this ->getStackMock (false ));
89+
90+ // Simulate receiving the first message
91+ $ envelope = $ envelope ->with (new ReceivedStamp ('transport ' ));
92+ $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
93+
94+ $ message3 = new DummyMessage ('Hello ' );
95+ $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE_OR_PROCESS , 'id ' )]);
96+ $ decorator ->handle ($ envelope3 , $ this ->getStackMock (true ));
97+ }
98+
99+ public function testLockMiddlewareIfMessageHasKeyWithThirdMode ()
100+ {
101+ $ message = new DummyMessage ('Hello ' );
102+ $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_BLOCK_DUPLICATE_IN_PROCESS , 'id ' )]);
103+
104+ if (SemaphoreStore::isSupported ()) {
105+ $ store = new SemaphoreStore ();
106+ } else {
107+ $ store = new FlockStore ();
108+ }
109+
110+ $ decorator = new LockMiddleware (new LockFactory ($ store ));
111+
112+ $ envelope = $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
113+ $ this ->assertNotNull ($ envelope ->last (LockStamp::class));
114+
115+ $ message2 = new DummyMessage ('Hello ' );
116+ $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_BLOCK_DUPLICATE_IN_PROCESS , 'id ' )]);
117+
118+ // Not blocking when adding the message in the queue.
119+ $ decorator ->handle ($ envelope2 , $ this ->getStackMock (true ));
120+
121+ // Simulate receiving the first message
122+ $ envelope = $ envelope ->with (new ReceivedStamp ('transport ' ));
123+ $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
124+
125+ $ message3 = new DummyMessage ('Hello ' );
126+ $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_BLOCK_DUPLICATE_IN_PROCESS , 'id ' )]);
66127 $ decorator ->handle ($ envelope3 , $ this ->getStackMock (true ));
67128 }
68129}
0 commit comments