Skip to content

Commit 0a49a14

Browse files
author
pmosk
committed
Use .NET8 features
1 parent a6c70ad commit 0a49a14

16 files changed

+95
-94
lines changed

src/service/CrmProject/Api/Api/Api.GetLast.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace GarageGroup.Internal.Timesheet;
77

8-
partial class CrmProjectApi<TDataverseApi>
8+
partial class CrmProjectApi
99
{
1010
public ValueTask<Result<LastProjectSetGetOut, Failure<ProjectSetGetFailureCode>>> GetLastAsync(
1111
LastProjectSetGetIn input, CancellationToken cancellationToken)

src/service/CrmProject/Api/Api/Api.Search.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace GarageGroup.Internal.Timesheet;
88

9-
partial class CrmProjectApi<TDataverseApi>
9+
partial class CrmProjectApi
1010
{
1111
public ValueTask<Result<ProjectSetSearchOut, Failure<ProjectSetGetFailureCode>>> SearchAsync(
1212
ProjectSetSearchIn input, CancellationToken cancellationToken)

src/service/CrmProject/Api/Api/CrmProjectApi.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,14 @@
22

33
namespace GarageGroup.Internal.Timesheet;
44

5-
internal sealed partial class CrmProjectApi<TDataverseApi> : ICrmProjectApi
6-
where TDataverseApi : IDataverseSearchSupplier, IDataverseImpersonateSupplier<IDataverseSearchSupplier>
5+
using TDataverseApi = IDataverseImpersonateSupplier<IDataverseSearchSupplier>;
6+
using TSqlApi = ISqlQueryEntitySetSupplier;
7+
8+
internal sealed partial class CrmProjectApi(TDataverseApi dataverseApi, TSqlApi sqlApi) : ICrmProjectApi
79
{
810
private static readonly IDbFilter AllowedProjectTypeSetFilter;
911

1012
static CrmProjectApi()
1113
=>
1214
AllowedProjectTypeSetFilter = DbTimesheetProject.BuildAllowedProjectTypeSetFilter();
13-
14-
private readonly TDataverseApi dataverseApi;
15-
16-
private readonly ISqlQueryEntitySetSupplier sqlApi;
17-
18-
internal CrmProjectApi(TDataverseApi dataverseApi, ISqlQueryEntitySetSupplier sqlApi)
19-
{
20-
this.dataverseApi = dataverseApi;
21-
this.sqlApi = sqlApi;
22-
}
2315
}

src/service/CrmProject/Api/CrmProjectApiDependency.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ public static class CrmProjectApiDependency
1212
{
1313
public static Dependency<ICrmProjectApi> UseCrmProjectApi<TDataverseApi, TSqlApi>(
1414
this Dependency<TDataverseApi, TSqlApi> dependency)
15-
where TDataverseApi : IDataverseSearchSupplier, IDataverseImpersonateSupplier<IDataverseSearchSupplier>
15+
where TDataverseApi : IDataverseImpersonateSupplier<IDataverseSearchSupplier>
1616
where TSqlApi : ISqlQueryEntitySetSupplier
1717
{
1818
ArgumentNullException.ThrowIfNull(dependency);
1919
return dependency.Fold<ICrmProjectApi>(CreateApi);
2020

21-
static CrmProjectApi<TDataverseApi> CreateApi(TDataverseApi dataverseApi, TSqlApi sqlApi)
21+
static CrmProjectApi CreateApi(TDataverseApi dataverseApi, TSqlApi sqlApi)
2222
{
2323
ArgumentNullException.ThrowIfNull(dataverseApi);
2424
ArgumentNullException.ThrowIfNull(sqlApi);

src/service/CrmProject/Test/Test.Api/Api.GetLast.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static async Task GetLastAsync_ExpectMockSqlApiCalledOnce(
1515
LastProjectSetGetIn input, DbSelectQuery expectedQuery)
1616
{
1717
var mockSqlApi = BuildMockSqlApi(SomeTimesheetProjectSetOutput);
18-
var api = new CrmProjectApi<IStubDataverseApi>(Mock.Of<IStubDataverseApi>(), mockSqlApi.Object);
18+
var api = new CrmProjectApi(Mock.Of<IDataverseImpersonateSupplier<IDataverseSearchSupplier>>(), mockSqlApi.Object);
1919

2020
var cancellationToken = new CancellationToken(false);
2121
_ = await api.GetLastAsync(input, cancellationToken);
@@ -30,7 +30,7 @@ public static async Task GetLastAsync_DbResultIsFailure_ExpectUnknownFailure()
3030
var dbFailure = sourceException.ToFailure("Some Failure message");
3131

3232
var mockSqlApi = BuildMockSqlApi(dbFailure);
33-
var api = new CrmProjectApi<IStubDataverseApi>(Mock.Of<IStubDataverseApi>(), mockSqlApi.Object);
33+
var api = new CrmProjectApi(Mock.Of<IDataverseImpersonateSupplier<IDataverseSearchSupplier>>(), mockSqlApi.Object);
3434

3535
var actual = await api.GetLastAsync(SomeLastProjectSetGetInput, default);
3636
var expected = Failure.Create(ProjectSetGetFailureCode.Unknown, "Some Failure message", sourceException);
@@ -44,7 +44,7 @@ internal static async Task GetLastAsync_DbResultIsSuccess_ExpectSuccess(
4444
FlatArray<DbTimesheetProject> dbTimesheetProjects, LastProjectSetGetOut expected)
4545
{
4646
var mockSqlApi = BuildMockSqlApi(dbTimesheetProjects);
47-
var api = new CrmProjectApi<IStubDataverseApi>(Mock.Of<IStubDataverseApi>(), mockSqlApi.Object);
47+
var api = new CrmProjectApi(Mock.Of<IDataverseImpersonateSupplier<IDataverseSearchSupplier>>(), mockSqlApi.Object);
4848

4949
var actual = await api.GetLastAsync(SomeLastProjectSetGetInput, default);
5050
Assert.StrictEqual(expected, actual);

src/service/CrmProject/Test/Test.Api/Api.Search.cs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ partial class CrmProjectApiTest
1212
[Fact]
1313
public static async Task SearchAsync_InputIsNull_ExpectArgumentNullException()
1414
{
15-
var mockDataverseApiClient = BuildMockDataverseApiClient(SomeDataverseSearchOutput);
16-
var api = new CrmProjectApi<IStubDataverseApi>(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
15+
var mockDataverseSearchSupplier = BuildMockDataverseSearchSupplier(SomeDataverseSearchOutput);
16+
var mockDataverseApiClient = BuildMockDataverseApiClient(mockDataverseSearchSupplier.Object);
1717

18+
var api = new CrmProjectApi(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
1819
var ex = await Assert.ThrowsAsync<ArgumentNullException>(TestAsync);
1920

2021
Assert.Equal("input", ex.ParamName);
@@ -27,8 +28,10 @@ async Task TestAsync()
2728
[Fact]
2829
public static async Task SearchAsync_InputIsNotNull_ExpectDataverseImpersonateCalledOnce()
2930
{
30-
var mockDataverseApiClient = BuildMockDataverseApiClient(SomeDataverseSearchOutput);
31-
var api = new CrmProjectApi<IStubDataverseApi>(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
31+
var mockDataverseSearchSupplier = BuildMockDataverseSearchSupplier(SomeDataverseSearchOutput);
32+
var mockDataverseApiClient = BuildMockDataverseApiClient(mockDataverseSearchSupplier.Object);
33+
34+
var api = new CrmProjectApi(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
3235

3336
var input = new ProjectSetSearchIn(
3437
searchText: "Some search text",
@@ -43,16 +46,18 @@ public static async Task SearchAsync_InputIsNotNull_ExpectDataverseImpersonateCa
4346

4447
[Theory]
4548
[MemberData(nameof(CrmProjectApiSource.InputSearchTestData), MemberType = typeof(CrmProjectApiSource))]
46-
public static async Task SearchAsync_InputIsNotNull_ExpectDataverseApiCalledOnce(
49+
public static async Task SearchAsync_InputIsNotNull_ExpectDataverseSearchCalledOnce(
4750
ProjectSetSearchIn input, DataverseSearchIn expectedInput)
4851
{
49-
var mockDataverseApiClient = BuildMockDataverseApiClient(SomeDataverseSearchOutput);
50-
var api = new CrmProjectApi<IStubDataverseApi>(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
52+
var mockDataverseSearchSupplier = BuildMockDataverseSearchSupplier(SomeDataverseSearchOutput);
53+
var mockDataverseApiClient = BuildMockDataverseApiClient(mockDataverseSearchSupplier.Object);
54+
55+
var api = new CrmProjectApi(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
5156

5257
var cancellationToken = new CancellationToken(false);
5358
_ = await api.SearchAsync(input, cancellationToken);
5459

55-
mockDataverseApiClient.Verify(a => a.SearchAsync(expectedInput, cancellationToken), Times.Once);
60+
mockDataverseSearchSupplier.Verify(a => a.SearchAsync(expectedInput, cancellationToken), Times.Once);
5661
}
5762

5863
[Theory]
@@ -71,8 +76,10 @@ public static async Task SearchProjectSetAsync_DataverseResultIsFailure_ExpectFa
7176
var sourceException = new Exception("Some exception message");
7277
var dataverseFailure = sourceException.ToFailure(sourceFailureCode, "Some failure text");
7378

74-
var mockDataverseApiClient = BuildMockDataverseApiClient(dataverseFailure);
75-
var api = new CrmProjectApi<IStubDataverseApi>(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
79+
var mockDataverseSearchSupplier = BuildMockDataverseSearchSupplier(dataverseFailure);
80+
var mockDataverseApiClient = BuildMockDataverseApiClient(mockDataverseSearchSupplier.Object);
81+
82+
var api = new CrmProjectApi(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
7683

7784
var actual = await api.SearchAsync(SomeProjectSetSearchInput, default);
7885
var expected = Failure.Create(expectedFailureCode, "Some failure text", sourceException);
@@ -85,10 +92,12 @@ public static async Task SearchProjectSetAsync_DataverseResultIsFailure_ExpectFa
8592
public static async Task SearchAsync_DataverseResultIsSuccess_ExpectSuccess(
8693
DataverseSearchOut dataverseOutput, ProjectSetSearchOut expected)
8794
{
88-
var mockDataverseApiClient = BuildMockDataverseApiClient(dataverseOutput);
89-
var api = new CrmProjectApi<IStubDataverseApi>(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
95+
var mockDataverseSearchSupplier = BuildMockDataverseSearchSupplier(dataverseOutput);
96+
var mockDataverseApiClient = BuildMockDataverseApiClient(mockDataverseSearchSupplier.Object);
9097

98+
var api = new CrmProjectApi(mockDataverseApiClient.Object, Mock.Of<ISqlQueryEntitySetSupplier>());
9199
var actual = await api.SearchAsync(SomeProjectSetSearchInput, default);
100+
92101
Assert.StrictEqual(expected, actual);
93102
}
94103
}

src/service/CrmProject/Test/Test.Api/CrmProjectApiTest.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Runtime.CompilerServices;
43
using System.Text.Json;
54
using System.Threading;
65
using GarageGroup.Infra;
76
using Moq;
87

9-
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
10-
118
namespace GarageGroup.Internal.Timesheet.Service.CrmProject.Test;
129

1310
public static partial class CrmProjectApiTest
@@ -80,21 +77,25 @@ private static Mock<ISqlQueryEntitySetSupplier> BuildMockSqlApi(
8077
return mock;
8178
}
8279

83-
private static Mock<IStubDataverseApi> BuildMockDataverseApiClient(
80+
private static Mock<IDataverseImpersonateSupplier<IDataverseSearchSupplier>> BuildMockDataverseApiClient(
81+
IDataverseSearchSupplier dataverseSearchSupplier)
82+
{
83+
var mock = new Mock<IDataverseImpersonateSupplier<IDataverseSearchSupplier>>();
84+
85+
_ = mock.Setup(static a => a.Impersonate(It.IsAny<Guid>())).Returns(dataverseSearchSupplier);
86+
87+
return mock;
88+
}
89+
90+
private static Mock<IDataverseSearchSupplier> BuildMockDataverseSearchSupplier(
8491
Result<DataverseSearchOut, Failure<DataverseFailureCode>> result)
8592
{
86-
var mock = new Mock<IStubDataverseApi>();
93+
var mock = new Mock<IDataverseSearchSupplier>();
8794

8895
_ = mock
8996
.Setup(static a => a.SearchAsync(It.IsAny<DataverseSearchIn>(), It.IsAny<CancellationToken>()))
9097
.ReturnsAsync(result);
9198

92-
_ = mock.Setup(static a => a.Impersonate(It.IsAny<Guid>())).Returns(mock.Object);
93-
9499
return mock;
95100
}
96-
97-
internal interface IStubDataverseApi : IDataverseSearchSupplier, IDataverseImpersonateSupplier<IStubDataverseApi>
98-
{
99-
}
100101
}

src/service/CrmTimesheet/Api/Api/Api.Create.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace GarageGroup.Internal.Timesheet;
88

9-
partial class CrmTimesheetApi<TDataverseApi>
9+
partial class CrmTimesheetApi
1010
{
1111
public ValueTask<Result<Unit, Failure<TimesheetCreateFailureCode>>> CreateAsync(
1212
TimesheetCreateIn input, CancellationToken cancellationToken)

src/service/CrmTimesheet/Api/Api/Api.Get.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace GarageGroup.Internal.Timesheet;
77

8-
partial class CrmTimesheetApi<TDataverseApi>
8+
partial class CrmTimesheetApi
99
{
1010
public ValueTask<Result<TimesheetSetGetOut, Failure<TimesheetSetGetFailureCode>>> GetAsync(
1111
TimesheetSetGetIn input, CancellationToken cancellationToken)

src/service/CrmTimesheet/Api/Api/Api.GetTagSet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace GarageGroup.Internal.Timesheet;
1010

11-
partial class CrmTimesheetApi<TDataverseApi>
11+
partial class CrmTimesheetApi
1212
{
1313
public ValueTask<Result<TimesheetTagSetGetOut, Failure<Unit>>> GetTagSetAsync(
1414
TimesheetTagSetGetIn input, CancellationToken cancellationToken)

0 commit comments

Comments
 (0)