Skip to content
This repository was archived by the owner on Sep 17, 2023. It is now read-only.

Commit 7e4e9cc

Browse files
iojancodedanielwertheim
authored andcommitted
Support Document revisions (#182)
Adds support for revisions
1 parent 8bf5179 commit 7e4e9cc

File tree

7 files changed

+42
-0
lines changed

7 files changed

+42
-0
lines changed

source/projects/MyCouch/HttpRequestFactories/GetDocumentHttpRequestFactory.cs

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ protected virtual string GenerateRelativeUrl(GetDocumentRequest request)
2222

2323
urlParams.AddIfNotNullOrWhiteSpace("rev", request.Rev);
2424
urlParams.AddIfTrue("conflicts", request.Conflicts);
25+
urlParams.AddIfTrue("revs", request.Revisions);
2526

2627
return string.Format("/{0}{1}", new UrlSegment(request.Id), new QueryString(urlParams));
2728
}

source/projects/MyCouch/Requests/GetDocumentRequest.cs

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class GetDocumentRequest : Request
77
public string Id { get; private set; }
88
public string Rev { get; private set; }
99
public bool? Conflicts { get; set; }
10+
public bool? Revisions { get; set; }
1011

1112
public GetDocumentRequest(string id, string rev = null)
1213
{

source/projects/MyCouch/Responses/DocumentResponse.cs

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ public class DocumentResponse : TextResponse,
1515
[JsonProperty(JsonScheme.Conflicts)]
1616
public string[] Conflicts { get; set; }
1717

18+
[JsonProperty(JsonScheme.Revisions)]
19+
public RevisionList Revisions { get; set; }
20+
21+
public class RevisionList
22+
{
23+
public string[] Ids { get; set; }
24+
public int Start { get; set; }
25+
}
26+
1827
public override string ToStringDebugVersion()
1928
{
2029
return string.Format("{1}{0}Id: {2}{0}Rev: {3}",

source/projects/MyCouch/Responses/JsonScheme.cs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public static class JsonScheme
1818
public const string LastSeq = "last_seq";
1919
public const string TotalRows = "total_rows";
2020
public const string Conflicts = "_conflicts";
21+
public const string Revisions = "_revisions";
2122

2223
public const string LocalId = "_local_id";
2324
public const string NoChanges = "no_changes";

source/projects/MyCouch/Responses/Materializers/DocumentResponseMaterializer.cs

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public virtual async Task MaterializeAsync(DocumentResponse response, HttpRespon
3535
response.Id = jt[JsonScheme._Id]?.Value<string>();
3636
response.Rev = jt[JsonScheme._Rev]?.Value<string>();
3737
response.Conflicts = jt[JsonScheme.Conflicts]?.Values<string>().ToArray();
38+
response.Revisions = jt[JsonScheme.Revisions]?.ToObject<DocumentResponse.RevisionList>();
3839

3940
SetMissingIdFromRequestUri(response, httpResponse.RequestMessage);
4041
SetMissingRevFromResponseHeaders(response, httpResponse.Headers);

source/tests/IntegrationTests/CoreTests/DocumentsTests.cs

+14
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@ public void When_GET_of_document_with_no_conflicts_when_including_conflicts_It_r
2525
response.Should().BeSuccessfulGet(postResponse.Id, postResponse.Rev);
2626
}
2727

28+
[MyFact(TestScenarios.DocumentsContext)]
29+
public void When_GET_of_document_when_including_revisions_It_returns_at_least_its_revision()
30+
{
31+
var postResponse = SUT.PostAsync(ClientTestData.Artists.Artist1Json).Result;
32+
var postResponseRevId = postResponse.Rev.Split('-')[1];
33+
var request = new GetDocumentRequest(postResponse.Id) { Revisions = true };
34+
35+
var response = SUT.GetAsync(request).Result;
36+
37+
response.Should().BeSuccessfulGet(postResponse.Id, postResponse.Rev);
38+
response.Revisions.Should().NotBeNull();
39+
response.Revisions.Ids.Should().NotBeNullOrEmpty().And.Contain(postResponseRevId);
40+
}
41+
2842
[MyFact(TestScenarios.DocumentsContext)]
2943
public void When_HEAD_of_non_existing_document_The_response_is_empty()
3044
{

source/tests/UnitTests/HttpRequestFactories/GetDocumentHttpRequestFactoryTests.cs

+15
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ public void When_configured_with_conflicts_It_yields_url_with_conflicts()
7373
});
7474
}
7575

76+
[Fact]
77+
public void When_configured_with_revisions_It_yields_url_with_revs()
78+
{
79+
var request = CreateRequest();
80+
request.Revisions = true;
81+
82+
WithHttpRequestFor(
83+
request,
84+
req =>
85+
{
86+
req.RelativeUrl.ToTestUriFromRelative().AbsolutePath.Should().EndWith("/" + FakeId);
87+
req.RelativeUrl.ToTestUriFromRelative().Query.Should().Be("?revs=true");
88+
});
89+
}
90+
7691
protected virtual GetDocumentRequest CreateRequest(string id = FakeId, string rev = null)
7792
{
7893
return new GetDocumentRequest(id, rev);

0 commit comments

Comments
 (0)