1+ namespace SqlStreamStore . HAL . Tests
2+ {
3+ using System ;
4+ using System . Net ;
5+ using System . Net . Http ;
6+ using System . Net . Http . Headers ;
7+ using System . Threading . Tasks ;
8+ using Newtonsoft . Json . Linq ;
9+ using Shouldly ;
10+ using SqlStreamStore . Streams ;
11+ using Xunit ;
12+
13+ public class StreamAppendTests : IDisposable
14+ {
15+ private readonly SqlStreamStoreHalMiddlewareFixture _fixture ;
16+
17+ public StreamAppendTests ( )
18+ {
19+ _fixture = new SqlStreamStoreHalMiddlewareFixture ( ) ;
20+ }
21+
22+ [ Fact ]
23+ public async Task append_expected_version_any ( )
24+ {
25+ var messageId = Guid . NewGuid ( ) ;
26+
27+ var jsonData = JObject . FromObject ( new
28+ {
29+ property = "value"
30+ } ) ;
31+
32+ var jsonMetadata = JObject . FromObject ( new
33+ {
34+ property = "metaValue"
35+ } ) ;
36+
37+ using ( var response = await _fixture . HttpClient . PostAsync (
38+ "/streams/a-stream" ,
39+ new StringContent ( JObject . FromObject ( new
40+ {
41+ expectedVersion = ExpectedVersion . Any ,
42+ messages = new [ ]
43+ {
44+ new
45+ {
46+ messageId ,
47+ type = "type" ,
48+ jsonData ,
49+ jsonMetadata
50+ }
51+ }
52+ } ) . ToString ( ) )
53+ {
54+ Headers =
55+ {
56+ ContentType = new MediaTypeHeaderValue ( "application/json" )
57+ }
58+ } ) )
59+ {
60+ response . StatusCode . ShouldBe ( HttpStatusCode . OK ) ;
61+ }
62+
63+ var page = await _fixture . StreamStore . ReadStreamForwards ( "a-stream" , 0 , 1 ) ;
64+
65+ page . Status . ShouldBe ( PageReadStatus . Success ) ;
66+ page . Messages . Length . ShouldBe ( 1 ) ;
67+ page . Messages [ 0 ] . MessageId . ShouldBe ( messageId ) ;
68+ page . Messages [ 0 ] . Type . ShouldBe ( "type" ) ;
69+ JToken . DeepEquals ( JObject . Parse ( await page . Messages [ 0 ] . GetJsonData ( ) ) , jsonData ) . ShouldBeTrue ( ) ;
70+ JToken . DeepEquals ( JObject . Parse ( page . Messages [ 0 ] . JsonMetadata ) , jsonMetadata ) . ShouldBeTrue ( ) ;
71+ }
72+
73+ [ Fact ]
74+ public async Task append_expected_version_no_stream ( )
75+ {
76+ var messageId = Guid . NewGuid ( ) ;
77+
78+ var jsonData = JObject . FromObject ( new
79+ {
80+ property = "value"
81+ } ) ;
82+
83+ var jsonMetadata = JObject . FromObject ( new
84+ {
85+ property = "metaValue"
86+ } ) ;
87+
88+ using ( var response = await _fixture . HttpClient . PostAsync (
89+ "/streams/a-stream" ,
90+ new StringContent ( JObject . FromObject ( new
91+ {
92+ expectedVersion = ExpectedVersion . NoStream ,
93+ messages = new [ ]
94+ {
95+ new
96+ {
97+ messageId ,
98+ type = "type" ,
99+ jsonData ,
100+ jsonMetadata
101+ }
102+ }
103+ } ) . ToString ( ) )
104+ {
105+ Headers =
106+ {
107+ ContentType = new MediaTypeHeaderValue ( "application/json" )
108+ }
109+ } ) )
110+ {
111+ response . StatusCode . ShouldBe ( HttpStatusCode . Created ) ;
112+ response . Headers . Location . ToString ( ) . ShouldBe ( "streams/a-stream" ) ;
113+ }
114+
115+ var page = await _fixture . StreamStore . ReadStreamForwards ( "a-stream" , 0 , 1 ) ;
116+
117+ page . Status . ShouldBe ( PageReadStatus . Success ) ;
118+ page . Messages . Length . ShouldBe ( 1 ) ;
119+ page . Messages [ 0 ] . MessageId . ShouldBe ( messageId ) ;
120+ page . Messages [ 0 ] . Type . ShouldBe ( "type" ) ;
121+ JToken . DeepEquals ( JObject . Parse ( await page . Messages [ 0 ] . GetJsonData ( ) ) , jsonData ) . ShouldBeTrue ( ) ;
122+ JToken . DeepEquals ( JObject . Parse ( page . Messages [ 0 ] . JsonMetadata ) , jsonMetadata ) . ShouldBeTrue ( ) ;
123+ }
124+
125+ public void Dispose ( ) => _fixture . Dispose ( ) ;
126+ }
127+ }
0 commit comments