Skip to content

Commit c75c680

Browse files
authored
Merge pull request #17 from episerver/CG-14844-Journal-Id-Not-Returned
CG-14844: Graph Source SDK - Journal Id Not Returned
2 parents 150a18d + c083f76 commit c75c680

File tree

3 files changed

+64
-16
lines changed

3 files changed

+64
-16
lines changed

Optimizely.Graph.Source.Sdk/Optimizely.Graph.Source.Sdk.Tests/RepositoryTests/GraphSourceRepositoryTests.cs

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,62 @@ public async Task SaveContentAsync_SerializesData_AndCallsGraphClient()
203203
var request = new HttpRequestMessage(HttpMethod.Post, $"/api/content/v2/data?id={source}") { Content = content };
204204

205205
mockRestClient.Setup(c => c.SendAsync(It.IsAny<HttpRequestMessage>())).ReturnsAsync(response);
206-
mockRestClient.Setup(c => c.HandleResponse(response));
206+
mockRestClient.Setup(c => c.HandleResponse<ContentV2ApiResponse>(response));
207207

208208
// Act
209209
await repository.SaveContentAsync(generateId: (x) => x.ToString(), exampleData);
210210

211211
// Assert
212212
mockRestClient.Verify(c => c.SendAsync(It.Is<HttpRequestMessage>(x => Compare(request, x))), Times.Once);
213-
mockRestClient.Verify(c => c.HandleResponse(response), Times.Once);
213+
mockRestClient.Verify(c => c.HandleResponse<ContentV2ApiResponse>(response), Times.Once);
214+
mockRestClient.VerifyAll();
215+
}
216+
217+
[TestMethod]
218+
public async Task SaveContentAsync_SerializesData_ReturnsJournalId()
219+
{
220+
// Arrange
221+
repository.ConfigureContentType<ExampleClassObject>()
222+
.Field(x => x.FirstName, IndexingType.Searchable)
223+
.Field(x => x.LastName, IndexingType.Searchable)
224+
.Field(x => x.Age, IndexingType.Queryable)
225+
.Field(x => x.SubType, IndexingType.PropertyType);
226+
227+
repository.ConfigurePropertyType<ExampleClassObject.SubType1>()
228+
.Field(x => x.One, IndexingType.Searchable)
229+
.Field(x => x.Two, IndexingType.Queryable);
230+
231+
var exampleData = new ExampleClassObject
232+
{
233+
FirstName = "First",
234+
LastName = "Last",
235+
Age = 99,
236+
SubType = new ExampleClassObject.SubType1
237+
{
238+
One = "one",
239+
Two = 13
240+
}
241+
};
242+
243+
var expectedJsonString = BuildExpectedContentJsonString(x => x.ToString(), exampleData);
244+
245+
var content = new StringContent(expectedJsonString, Encoding.UTF8, "application/json");
246+
247+
var response = new HttpResponseMessage(HttpStatusCode.OK);
248+
var request = new HttpRequestMessage(HttpMethod.Post, $"/api/content/v2/data?id={source}") { Content = content };
249+
250+
var expectedApiResponse = new ContentV2ApiResponse { JournalId = "stream/id" };
251+
252+
mockRestClient.Setup(c => c.SendAsync(It.IsAny<HttpRequestMessage>())).ReturnsAsync(response);
253+
mockRestClient.Setup(c => c.HandleResponse<ContentV2ApiResponse>(response)).ReturnsAsync(expectedApiResponse);
254+
255+
// Act
256+
var actualJournalId = await repository.SaveContentAsync(generateId: (x) => x.ToString(), exampleData);
257+
258+
// Assert
259+
Assert.AreEqual(expectedApiResponse.JournalId, actualJournalId);
260+
mockRestClient.Verify(c => c.SendAsync(It.Is<HttpRequestMessage>(x => Compare(request, x))), Times.Once);
261+
mockRestClient.Verify(c => c.HandleResponse<ContentV2ApiResponse>(response), Times.Once);
214262
mockRestClient.VerifyAll();
215263
}
216264

@@ -284,11 +332,11 @@ public async Task SaveContentAsync_WithMultipleTypes_ShouldGenerateJsonForConten
284332
{""index"":{""_id"":""Location-London"",""language_routing"":""en""}}
285333
{""Status$$String"":""Published"",""__typename"":""Location"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Location""],""Language"":{""Name$$String"":""en""},""Longitude$$Float"":0.1275,""Latitude$$Float"":51.5072,""Name$$String___searchable"":""London""}
286334
{""index"":{""_id"":""Event-Future of Project Management"",""language_routing"":""en""}}
287-
{""Status$$String"":""Published"",""__typename"":""Event"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Event""],""Language"":{""Name$$String"":""en""},""LocationName$$String"":""Stockholm"",""Time$$DateTime"":""2024-10-21T22:00:00Z"",""Name$$String___searchable"":""Future of Project Management"",""AdditionalInfo"":{""Example1$$String___skip"":""test1"",""Example2$$Int"":1}}
335+
{""Status$$String"":""Published"",""__typename"":""Event"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Event""],""Language"":{""Name$$String"":""en""},""LocationName$$String"":""Stockholm"",""Time$$DateTime"":""2024-10-22T04:00:00Z"",""Name$$String___searchable"":""Future of Project Management"",""AdditionalInfo"":{""Example1$$String___skip"":""test1"",""Example2$$Int"":1}}
288336
{""index"":{""_id"":""Event-Week of Hope: Football Camp for Homeless Children in Hanoi!"",""language_routing"":""en""}}
289-
{""Status$$String"":""Published"",""__typename"":""Event"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Event""],""Language"":{""Name$$String"":""en""},""LocationName$$String"":""Hanoi"",""Time$$DateTime"":""2024-10-26T22:00:00Z"",""Name$$String___searchable"":""Week of Hope: Football Camp for Homeless Children in Hanoi!"",""AdditionalInfo"":{""Example1$$String___skip"":""test2"",""Example2$$Int"":2}}
337+
{""Status$$String"":""Published"",""__typename"":""Event"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Event""],""Language"":{""Name$$String"":""en""},""LocationName$$String"":""Hanoi"",""Time$$DateTime"":""2024-10-27T04:00:00Z"",""Name$$String___searchable"":""Week of Hope: Football Camp for Homeless Children in Hanoi!"",""AdditionalInfo"":{""Example1$$String___skip"":""test2"",""Example2$$Int"":2}}
290338
{""index"":{""_id"":""Event-Optimizing Project Management: Strategies for Success"",""language_routing"":""en""}}
291-
{""Status$$String"":""Published"",""__typename"":""Event"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Event""],""Language"":{""Name$$String"":""en""},""LocationName$$String"":""London"",""Time$$DateTime"":""2024-11-02T23:00:00Z"",""Name$$String___searchable"":""Optimizing Project Management: Strategies for Success"",""AdditionalInfo"":{""Example1$$String___skip"":""test3"",""Example2$$Int"":3}}
339+
{""Status$$String"":""Published"",""__typename"":""Event"",""_rbac"":""r:Everyone:Read"",""ContentType$$String"":[""Event""],""Language"":{""Name$$String"":""en""},""LocationName$$String"":""London"",""Time$$DateTime"":""2024-11-03T04:00:00Z"",""Name$$String___searchable"":""Optimizing Project Management: Strategies for Success"",""AdditionalInfo"":{""Example1$$String___skip"":""test3"",""Example2$$Int"":3}}
292340
";
293341

294342
Func<object, string> generateId = (x) =>
@@ -313,7 +361,7 @@ public async Task SaveContentAsync_WithMultipleTypes_ShouldGenerateJsonForConten
313361
var request = new HttpRequestMessage(HttpMethod.Post, $"/api/content/v2/data?id={source}") { Content = content };
314362

315363
mockRestClient.Setup(c => c.SendAsync(It.IsAny<HttpRequestMessage>())).ReturnsAsync(response);
316-
mockRestClient.Setup(c => c.HandleResponse(response));
364+
mockRestClient.Setup(c => c.HandleResponse<ContentV2ApiResponse>(response));
317365

318366
// Act
319367
await repository.SaveContentAsync<object>(generateId, locationStockholm, locationLondon, event1, event2, event3);
@@ -322,7 +370,7 @@ public async Task SaveContentAsync_WithMultipleTypes_ShouldGenerateJsonForConten
322370
Assert.AreEqual(expectedJsonString, jsonString);
323371

324372
mockRestClient.Verify(c => c.SendAsync(It.Is<HttpRequestMessage>(x => Compare(request, x))), Times.Once);
325-
mockRestClient.Verify(c => c.HandleResponse(response), Times.Once);
373+
mockRestClient.Verify(c => c.HandleResponse<ContentV2ApiResponse>(response), Times.Once);
326374
mockRestClient.VerifyAll();
327375
}
328376

Optimizely.Graph.Source.Sdk/Optimizely.Graph.Source.Sdk/Repositories/GraphSourceRepository.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,11 @@ public async Task<string> SaveContentAsync<T>(Func<T, string> generateId, params
8585
{
8686
var content = CreateContent(generateId, data);
8787

88-
using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, $"{DataUrl}?id={source}"))
89-
{
90-
requestMessage.Content = content;
91-
using (var responseMessage = await client.SendAsync(requestMessage))
92-
{
93-
await client.HandleResponse(responseMessage);
94-
}
95-
}
96-
return string.Empty;
88+
using var requestMessage = new HttpRequestMessage(HttpMethod.Post, $"{DataUrl}?id={source}");
89+
requestMessage.Content = content;
90+
using var responseMessage = await client.SendAsync(requestMessage);
91+
var response = await client.HandleResponse<ContentV2ApiResponse>(responseMessage);
92+
return response?.JournalId ?? string.Empty;
9793
}
9894

9995
public StringContent CreateContent<T>(Func<T, string> generateId, params T[] data)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContentV2ApiResponse
2+
{
3+
public string JournalId { get; set; }
4+
}

0 commit comments

Comments
 (0)