Skip to content

Commit b245553

Browse files
committed
Merge branch 'release/0.15.0'
2 parents 603d440 + 39c18a0 commit b245553

File tree

46 files changed

+2270
-540
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+2270
-540
lines changed

Diff for: releasenotes.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Release Notes
22

3+
## Version 0.15.0 (2018-11-30)
4+
5+
6+
- [#144](https://github.com/binarymash/evelyn/pull/144) - [#143](https://github.com/binarymash/evelyn/issues/143) - refactor projection audit contributed by Philip Wood ([binarymash](https://github.com/binarymash))
7+
8+
Commits: fd28cb04f3...d00b5ae02d
9+
310
## Version 0.14.0 (2018-11-26)
411

512
- [#142](https://github.com/binarymash/evelyn/pull/142) - [#141](https://github.com/binarymash/evelyn/issues/141) - package update contributed by Philip Wood ([binarymash](https://github.com/binarymash))

Diff for: src/Evelyn.Client.Rest/EnvironmentStateRestProvider.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public EnvironmentState Invoke(Guid projectId, string environmentKey)
2424
try
2525
{
2626
var dto = _client
27-
.ApiStatesByProjectIdByEnvironmentNameGetAsync(projectId, environmentKey)
27+
.ApiStatesAsync(projectId, environmentKey)
2828
.GetAwaiter().GetResult();
2929

3030
var toggleStates = new List<ToggleState>();
@@ -37,7 +37,7 @@ public EnvironmentState Invoke(Guid projectId, string environmentKey)
3737
}
3838
}
3939

40-
return new EnvironmentState(dto.Version.Value, toggleStates);
40+
return new EnvironmentState(dto.Audit.Version.Value, toggleStates);
4141
}
4242
catch (SwaggerException ex)
4343
{

Diff for: src/Evelyn.Client.Rest/Generated/OpenApiClasses.cs

+1,816-223
Large diffs are not rendered by default.

Diff for: src/Evelyn.Client.Rest/Generated/RestApi.nswag

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
{
2+
"runtime": "NetCore21",
3+
"defaultVariables": null,
4+
"swaggerGenerator": {
5+
"fromSwagger": {
6+
"url": "http://localhost:2316/swagger/v0.1/swagger.json",
7+
"output": null
8+
}
9+
},
10+
"codeGenerators": {
11+
"swaggerToCSharpClient": {
12+
"clientBaseClass": null,
13+
"configurationClass": null,
14+
"generateClientClasses": true,
15+
"generateClientInterfaces": false,
16+
"generateDtoTypes": true,
17+
"injectHttpClient": false,
18+
"disposeHttpClient": true,
19+
"protectedMethods": [],
20+
"generateExceptionClasses": true,
21+
"exceptionClass": "SwaggerException",
22+
"wrapDtoExceptions": true,
23+
"useHttpClientCreationMethod": false,
24+
"httpClientType": "System.Net.Http.HttpClient",
25+
"useHttpRequestMessageCreationMethod": false,
26+
"useBaseUrl": true,
27+
"generateBaseUrlProperty": true,
28+
"generateSyncMethods": false,
29+
"exposeJsonSerializerSettings": false,
30+
"clientClassAccessModifier": "public",
31+
"typeAccessModifier": "public",
32+
"generateContractsOutput": false,
33+
"contractsNamespace": null,
34+
"contractsOutputFilePath": null,
35+
"parameterDateTimeFormat": "s",
36+
"generateUpdateJsonSerializerSettingsMethod": true,
37+
"serializeTypeInformation": false,
38+
"queryNullValue": "",
39+
"className": "{controller}Client",
40+
"operationGenerationMode": "SingleClientFromPathSegments",
41+
"additionalNamespaceUsages": [],
42+
"additionalContractNamespaceUsages": [],
43+
"generateOptionalParameters": false,
44+
"generateJsonMethods": true,
45+
"enforceFlagEnums": false,
46+
"parameterArrayType": "System.Collections.Generic.IEnumerable",
47+
"parameterDictionaryType": "System.Collections.Generic.IDictionary",
48+
"responseArrayType": "System.Collections.Generic.ICollection",
49+
"responseDictionaryType": "System.Collections.Generic.IDictionary",
50+
"wrapResponses": false,
51+
"wrapResponseMethods": [],
52+
"generateResponseClasses": true,
53+
"responseClass": "SwaggerResponse",
54+
"namespace": "Evelyn.Client.Rest.Generated",
55+
"requiredPropertiesMustBeDefined": true,
56+
"dateType": "System.DateTimeOffset",
57+
"jsonConverters": null,
58+
"dateTimeType": "System.DateTimeOffset",
59+
"timeType": "System.TimeSpan",
60+
"timeSpanType": "System.TimeSpan",
61+
"arrayType": "System.Collections.Generic.ICollection",
62+
"arrayInstanceType": "System.Collections.ObjectModel.Collection",
63+
"dictionaryType": "System.Collections.Generic.IDictionary",
64+
"dictionaryInstanceType": "System.Collections.Generic.Dictionary",
65+
"arrayBaseType": "System.Collections.ObjectModel.Collection",
66+
"dictionaryBaseType": "System.Collections.Generic.Dictionary",
67+
"classStyle": "Poco",
68+
"generateDefaultValues": true,
69+
"generateDataAnnotations": true,
70+
"excludedTypeNames": [],
71+
"handleReferences": false,
72+
"generateImmutableArrayProperties": false,
73+
"generateImmutableDictionaryProperties": false,
74+
"jsonSerializerSettingsTransformationMethod": null,
75+
"templateDirectory": null,
76+
"typeNameGeneratorType": null,
77+
"propertyNameGeneratorType": null,
78+
"enumNameGeneratorType": null,
79+
"serviceHost": null,
80+
"serviceSchemes": null,
81+
"output": null
82+
}
83+
}
84+
}

Diff for: src/Evelyn.Client/Domain/EnvironmentState.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ public class EnvironmentState
77
{
88
private readonly List<ToggleState> _toggleStates;
99

10-
public EnvironmentState(int version, IEnumerable<ToggleState> toggleStates)
10+
public EnvironmentState(long version, IEnumerable<ToggleState> toggleStates)
1111
{
1212
_toggleStates = toggleStates.ToList();
1313
Version = version;
1414
}
1515

16-
public int Version { get; private set; }
16+
public long Version { get; private set; }
1717

1818
public IEnumerable<ToggleState> ToggleStates => _toggleStates;
1919
}

Diff for: src/Evelyn.Core.Tests/ReadModel/EventStream/Handlers/EventHandlerSpecs.cs

+15-10
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using Evelyn.Core.ReadModel.EventStream.Handlers;
1414
using Evelyn.Core.ReadModel.Projections;
1515
using Evelyn.Core.ReadModel.Projections.EventHandlerState;
16+
using Evelyn.Core.ReadModel.Projections.Shared;
1617
using FluentAssertions;
1718
using Microsoft.Extensions.DependencyInjection;
1819
using Newtonsoft.Json;
@@ -202,12 +203,14 @@ private void GivenThereIsNoEventHandlerState()
202203

203204
private void GivenTheEventHasNotYetBeenHandled()
204205
{
205-
_originalEventHandlerState = new EventHandlerStateDto(
206-
_eventEnvelope.StreamVersion - 1,
206+
_originalEventHandlerState = EventHandlerStateDto.Create();
207+
208+
var eventAudit = EventAuditDto.Create(
207209
_dataFixture.Create<DateTimeOffset>(),
208210
_dataFixture.Create<string>(),
209-
_dataFixture.Create<DateTimeOffset>(),
210-
_dataFixture.Create<string>());
211+
_eventEnvelope.StreamVersion - 1);
212+
213+
_originalEventHandlerState.Processed(eventAudit);
211214

212215
_eventHandlerStateStore
213216
.Get(Arg.Any<string>())
@@ -216,12 +219,14 @@ private void GivenTheEventHasNotYetBeenHandled()
216219

217220
private void GivenTheEventHasAlreadyBeenHandled()
218221
{
219-
_originalEventHandlerState = new EventHandlerStateDto(
220-
_eventEnvelope.StreamVersion + 1,
222+
_originalEventHandlerState = EventHandlerStateDto.Create();
223+
224+
var eventAudit = EventAuditDto.Create(
221225
_dataFixture.Create<DateTimeOffset>(),
222226
_dataFixture.Create<string>(),
223-
_dataFixture.Create<DateTimeOffset>(),
224-
_dataFixture.Create<string>());
227+
_eventEnvelope.StreamVersion + 1);
228+
229+
_originalEventHandlerState.Processed(eventAudit);
225230

226231
_eventHandlerStateStore
227232
.Get(Arg.Any<string>())
@@ -273,13 +278,13 @@ private void ThenAnExceptionIsThrown()
273278
private void ThenTheStateIsCreated()
274279
{
275280
_eventHandlerStateStore.Received().Create(EventHandlerStateDto.StoreKey(typeof(SomeStream)), _updatedEventHandlerState);
276-
_updatedEventHandlerState.Version.Should().Be(_eventEnvelope.StreamVersion);
281+
_updatedEventHandlerState.Audit.Version.Should().Be(_eventEnvelope.StreamVersion);
277282
}
278283

279284
private void ThenTheStateIsUpdated()
280285
{
281286
_eventHandlerStateStore.Received().Update(EventHandlerStateDto.StoreKey(typeof(SomeStream)), _updatedEventHandlerState);
282-
_updatedEventHandlerState.Version.Should().Be(_eventEnvelope.StreamVersion);
287+
_updatedEventHandlerState.Audit.Version.Should().Be(_eventEnvelope.StreamVersion);
283288
}
284289

285290
private void ThenTheStateIsNotUpdated()

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/AccountProjects/AccountEvents/AccountRegisteredSpecs.cs

+1-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public void Nominal()
1616
this.Given(_ => GivenThereIsNoProjection())
1717
.When(_ => WhenWeHandleAnAccountRegisteredEvent())
1818
.Then(_ => ThenTheProjectionIsCreatedWithTheCorrectProperties())
19+
.And(_ => ThenTheAuditIsCreated())
1920
.BDDfy();
2021
}
2122

@@ -38,12 +39,7 @@ private void ThenTheProjectionIsCreatedWithTheCorrectProperties()
3839
ThenTheProjectionIsCreated();
3940

4041
UpdatedProjection.AccountId.Should().Be(Event.Id);
41-
UpdatedProjection.Created.Should().Be(Event.OccurredAt);
42-
UpdatedProjection.CreatedBy.Should().Be(Event.UserId);
43-
UpdatedProjection.LastModified.Should().Be(Event.OccurredAt);
44-
UpdatedProjection.LastModifiedBy.Should().Be(Event.UserId);
4542
UpdatedProjection.Projects.Should().BeEmpty();
46-
UpdatedProjection.Version.Should().Be(0);
4743
}
4844
}
4945
}

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/AccountProjects/AccountEvents/ProjectCreatedSpecs.cs

+3-8
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public void Nominal()
2828
.And(_ => GivenOurProjectIsNotOnTheProjection())
2929
.And(_ => GivenAnotherProjectIsOnTheProjection())
3030
.When(_ => WhenWeHandleAProjectCreatedEvent())
31-
.Then(_ => ThenTheProjectHadBeenAddedToTheProjection())
31+
.Then(_ => ThenOurProjectIsAdded())
32+
.And(_ => ThenTheAuditIsUpdated())
3233
.BDDfy();
3334
}
3435

@@ -47,15 +48,9 @@ private async Task WhenWeHandleAProjectCreatedEvent()
4748
await WhenTheEventIsHandled();
4849
}
4950

50-
private void ThenTheProjectHadBeenAddedToTheProjection()
51+
private void ThenOurProjectIsAdded()
5152
{
5253
UpdatedProjection.AccountId.Should().Be(OriginalProjection.AccountId);
53-
UpdatedProjection.Created.Should().Be(OriginalProjection.Created);
54-
UpdatedProjection.CreatedBy.Should().Be(OriginalProjection.CreatedBy);
55-
56-
UpdatedProjection.LastModified.Should().Be(Event.OccurredAt);
57-
UpdatedProjection.LastModifiedBy.Should().Be(Event.UserId);
58-
UpdatedProjection.Version.Should().Be(Event.Version);
5954

6055
var projects = UpdatedProjection.Projects.ToList();
6156

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/AccountProjects/AccountEvents/ProjectDeletedSpecs.cs

+3-8
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public void Nominal()
2727
.And(_ => GivenOurProjectIsOnTheProjection())
2828
.And(_ => GivenAnotherProjectIsOnTheProjection())
2929
.When(_ => WhenWeHandleTheProjectDeletedEvent())
30-
.Then(_ => ThenTheProjectionHasBeenUpdated())
30+
.Then(_ => ThenOurProjectIsRemoved())
31+
.And(_ => ThenTheAuditIsUpdated())
3132
.BDDfy();
3233
}
3334

@@ -46,15 +47,9 @@ private async Task WhenWeHandleTheProjectDeletedEvent()
4647
await WhenTheEventIsHandled();
4748
}
4849

49-
private void ThenTheProjectionHasBeenUpdated()
50+
private void ThenOurProjectIsRemoved()
5051
{
5152
UpdatedProjection.AccountId.Should().Be(OriginalProjection.AccountId);
52-
UpdatedProjection.Created.Should().Be(OriginalProjection.Created);
53-
UpdatedProjection.CreatedBy.Should().Be(OriginalProjection.CreatedBy);
54-
55-
UpdatedProjection.LastModified.Should().Be(Event.OccurredAt);
56-
UpdatedProjection.LastModifiedBy.Should().Be(Event.UserId);
57-
UpdatedProjection.Version.Should().Be(Event.Version);
5853

5954
var projects = UpdatedProjection.Projects.ToList();
6055
projects.Count.Should().Be(OriginalProjection.Projects.Count() - 1);

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/AccountProjects/AccountProjectsDtoSpecs.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using AutoFixture;
55
using Core.ReadModel.Projections.AccountProjects;
6+
using Evelyn.Core.ReadModel.Projections.Shared;
67
using Xunit;
78

89
public class AccountProjectsDtoSpecs : DtoHarness<AccountProjectsDto>
@@ -11,15 +12,12 @@ public class AccountProjectsDtoSpecs : DtoHarness<AccountProjectsDto>
1112
public void Serialization()
1213
{
1314
var accountProjects = AccountProjectsDto.Create(
14-
DataFixture.Create<Guid>(),
15-
DataFixture.Create<DateTimeOffset>(),
16-
DataFixture.Create<string>());
15+
DataFixture.Create<EventAuditDto>(),
16+
DataFixture.Create<Guid>());
1717

1818
accountProjects.AddProject(
19+
DataFixture.Create<EventAuditDto>(),
1920
DataFixture.Create<Guid>(),
20-
DataFixture.Create<string>(),
21-
DataFixture.Create<int>(),
22-
DataFixture.Create<DateTimeOffset>(),
2321
DataFixture.Create<string>());
2422

2523
AssertSerializationOf(accountProjects);

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/AccountProjects/ProjectEvents/ProjectCreatedSpecs.cs

+3-9
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public void Nominal()
2828
.And(_ => GivenOurProjectIsOnTheProjection())
2929
.And(_ => GivenAnotherProjectIsOnTheProjection())
3030
.When(_ => WhenWeHandleAProjectCreatedEvent())
31-
.Then(_ => ThenOurProjectNameHasBeenUpdated())
31+
.Then(_ => ThenOurProjectNameIsUpdated())
32+
.And(_ => ThenTheAuditIsUpdatedExcludingVersion())
3233
.BDDfy();
3334
}
3435

@@ -47,18 +48,11 @@ private async Task WhenWeHandleAProjectCreatedEvent()
4748
await WhenTheEventIsHandled();
4849
}
4950

50-
private void ThenOurProjectNameHasBeenUpdated()
51+
private void ThenOurProjectNameIsUpdated()
5152
{
5253
UpdatedProjection.AccountId.Should().Be(OriginalProjection.AccountId);
53-
UpdatedProjection.Created.Should().Be(OriginalProjection.Created);
54-
UpdatedProjection.CreatedBy.Should().Be(OriginalProjection.CreatedBy);
55-
56-
UpdatedProjection.LastModified.Should().Be(OriginalProjection.LastModified);
57-
UpdatedProjection.LastModifiedBy.Should().Be(OriginalProjection.LastModifiedBy);
58-
UpdatedProjection.Version.Should().Be(OriginalProjection.Version);
5954

6055
var projects = UpdatedProjection.Projects.ToList();
61-
6256
projects.Count.Should().Be(OriginalProjection.Projects.Count());
6357

6458
foreach (var originalProject in OriginalProjection.Projects.Where(p => p.Id != Event.Id))

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/AccountProjects/ProjectionHarness.cs

+3-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using AutoFixture;
55
using Evelyn.Core.ReadModel.Projections.AccountProjects;
6+
using Evelyn.Core.ReadModel.Projections.Shared;
67
using Evelyn.Core.WriteModel;
78
using NSubstitute;
89

@@ -38,20 +39,16 @@ protected void GivenOurProjectIsOnTheProjection()
3839
{
3940
ProjectId = DataFixture.Create<Guid>();
4041
OriginalProjection.AddProject(
42+
DataFixture.Create<EventAuditDto>(),
4143
ProjectId,
42-
DataFixture.Create<string>(),
43-
DataFixture.Create<int>(),
44-
DataFixture.Create<DateTimeOffset>(),
4544
DataFixture.Create<string>());
4645
}
4746

4847
protected void GivenAnotherProjectIsOnTheProjection()
4948
{
5049
OriginalProjection.AddProject(
50+
DataFixture.Create<EventAuditDto>(),
5151
DataFixture.Create<Guid>(),
52-
DataFixture.Create<string>(),
53-
DataFixture.Create<int>(),
54-
DataFixture.Create<DateTimeOffset>(),
5552
DataFixture.Create<string>());
5653
}
5754

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/EnvironmentDetails/ProjectEvents/EnvironmentAddedSpecs.cs

+1-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public void Nominal()
1515
this.Given(_ => GivenThereIsNoProjection())
1616
.When(_ => WhenWeHandleAProjectCreatedEvent())
1717
.Then(_ => ThenTheProjectionIsCreated())
18+
.And(_ => ThenTheAuditIsCreated())
1819
.BDDfy();
1920
}
2021

@@ -36,12 +37,6 @@ private async Task WhenWeHandleAProjectCreatedEvent()
3637
private void ThenTheProjectionIsCreated()
3738
{
3839
UpdatedProjection.ProjectId.Should().Be(Event.Id);
39-
UpdatedProjection.Created.Should().Be(Event.OccurredAt);
40-
UpdatedProjection.CreatedBy.Should().Be(Event.UserId);
41-
42-
UpdatedProjection.LastModified.Should().Be(Event.OccurredAt);
43-
UpdatedProjection.LastModifiedBy.Should().Be(Event.UserId);
44-
UpdatedProjection.Version.Should().Be(0);
4540

4641
UpdatedProjection.Key.Should().Be(Event.Key);
4742
UpdatedProjection.Name.Should().Be(Event.Name);

Diff for: src/Evelyn.Core.Tests/ReadModel/Projections/EnvironmentState/ProjectEvents/EnvironmentStateAddedSpecs.cs

+1-5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public void Nominal()
1717
this.Given(_ => GivenThereIsNoProjection())
1818
.When(_ => WhenWeHandleAnEnvironmentStateAddedEvent())
1919
.Then(_ => ThenTheProjectionIsCreated())
20+
.And(_ => ThenTheAuditIsCreated())
2021
.BDDfy();
2122
}
2223

@@ -39,11 +40,6 @@ private void ThenTheProjectionIsCreated()
3940
{
4041
ProjectionStore.Received().Create(EnvironmentStateDto.StoreKey(ProjectId, EnvironmentKey), UpdatedProjection);
4142

42-
UpdatedProjection.Created.Should().Be(Event.OccurredAt);
43-
UpdatedProjection.CreatedBy.Should().Be(Event.UserId);
44-
UpdatedProjection.LastModified.Should().Be(Event.OccurredAt);
45-
UpdatedProjection.LastModifiedBy.Should().Be(Event.UserId);
46-
UpdatedProjection.Version.Should().Be(Event.Version);
4743
UpdatedProjection.ToggleStates.Should().BeEquivalentTo(Event.ToggleStates);
4844
}
4945
}

0 commit comments

Comments
 (0)