Skip to content

Commit 11e8414

Browse files
Merge pull request #35 from engineering87/develop
fix(connectors): Sweep of bug fixes, async consistency, access wrappers hardening, and .NET 9 migration
2 parents 2ac7e85 + 61746ef commit 11e8414

33 files changed

+2060
-927
lines changed

.github/workflows/commit-lint.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ on:
77
- '*' # Runs on any pull request targeting any branch
88

99
name: Lint commits
10+
permissions:
11+
contents: read
12+
pull-requests: write
1013
jobs:
1114
lint-commits:
1215
runs-on: ubuntu-latest

.github/workflows/dotnet.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
33

44
name: Build
5+
permissions:
6+
contents: read
57

68
on:
79
push:
@@ -27,7 +29,7 @@ jobs:
2729
- name: Setup .NET
2830
uses: actions/setup-dotnet@v4
2931
with:
30-
dotnet-version: 8.0.x
32+
dotnet-version: 9.0.x
3133

3234
- name: Restore dependencies
3335
run: dotnet restore src/SharpConnector/SharpConnector.csproj

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<img src="https://github.com/engineering87/SharpConnector/blob/main/sharpconnector_logo.jpg" width="300">
1111

12-
SharpConnector is a .NET library designed to streamline integration with NoSQL databases. It provides a unified interface that simplifies database operations, eliminating the need to develop custom logic for each specific database connector. Since each NoSQL database has its own unique characteristicssuch as being document-oriented or key-value-basedSharpConnector abstracts these differences, providing a consistent and simplified access layer to accelerate development.
12+
SharpConnector is a .NET library designed to streamline integration with NoSQL databases. It provides a unified interface that simplifies database operations, eliminating the need to develop custom logic for each specific database connector. Since each NoSQL database has its own unique characteristics, such as being document-oriented or key-value-based, SharpConnector abstracts these differences, providing a consistent and simplified access layer to accelerate development.
1313

1414
## Features
1515

@@ -130,25 +130,25 @@ Then, add the specif `ConnectorConfig` node within your *appsettings.json* file:
130130
```
131131

132132
- ArangoDB
133-
```json
134-
{
135-
"ConnectorConfig": {
136-
"Instance": "ArangoDb",
137-
"ConnectionString": "http://localhost:8529",
138-
"Username": "username",
139-
"Password": "password",
140-
"CollectionName": "test"
141-
}
142-
}
143-
```
133+
```json
134+
{
135+
"ConnectorConfig": {
136+
"Instance": "ArangoDb",
137+
"ConnectionString": "http://localhost:8529",
138+
"Username": "username",
139+
"Password": "password",
140+
"CollectionName": "test"
141+
}
142+
}
143+
```
144144

145145
Once configured, create a new SharpConnector client, specifying the payload type (e.g., string):
146146

147147
```csharp
148148
SharpConnectorClient<string> client = new SharpConnectorClient<string>()
149149
```
150150

151-
Alternatively, you can integrate SharpConnector client using dependency injection. Heres how to register the SharpConnector service with a simple string payload type:
151+
Alternatively, you can integrate SharpConnector client using dependency injection. Here how to register the SharpConnector service with a simple string payload type:
152152

153153
```csharp
154154
// Register the SharpConnector services with string payload type.
@@ -169,7 +169,7 @@ If you want to add new connectors, please follow these three rules:
169169
* [Fork the repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)
170170
* [Open an issue](https://github.com/engineering87/SharpConnector/issues) if you encounter a bug or have a suggestion for improvements/features
171171

172-
### Licensee
172+
### License
173173
SharpConnector source code is available under MIT License, see license in the source.
174174

175175
#### External References

src/SharpConnector.Api/SharpConnector.Api.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<IsPackable>false</IsPackable>
@@ -42,7 +42,7 @@
4242
</ItemGroup>
4343

4444
<ItemGroup>
45-
<PackageReference Include="Swashbuckle.AspNetCore" Version="8.0.0" />
45+
<PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.3" />
4646
</ItemGroup>
4747

4848
<ItemGroup>

src/SharpConnector.Tests/ConnectorTests.cs

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Moq;
55
using SharpConnector.Interfaces;
66
using System.Collections.Generic;
7+
using System.Threading;
78
using System.Threading.Tasks;
89

910
namespace SharpConnector.Tests
@@ -18,17 +19,25 @@ public ConnectorTests()
1819
{
1920
_mockClient = new Mock<ISharpConnectorClient<string>>();
2021

22+
// Sync setups (nessun token qui)
2123
_mockClient.Setup(client => client.Insert(It.IsAny<string>(), It.IsAny<string>()))
2224
.Returns(true);
2325

24-
_mockClient.Setup(client => client.InsertAsync(It.IsAny<string>(), It.IsAny<string>()))
25-
.ReturnsAsync(true);
26-
2726
_mockClient.Setup(client => client.Get(It.IsAny<string>()))
2827
.Returns((string key) => key == "testKey" ? "payload" : null);
2928

30-
_mockClient.Setup(client => client.GetAsync(It.IsAny<string>()))
31-
.ReturnsAsync((string key) => key == "testKey" ? "payload" : null);
29+
// Async setups: SPECIFICA SEMPRE IL CancellationToken
30+
_mockClient.Setup(client => client.InsertAsync(
31+
It.IsAny<string>(),
32+
It.IsAny<string>(),
33+
It.IsAny<CancellationToken>()))
34+
.ReturnsAsync(true);
35+
36+
_mockClient.Setup(client => client.GetAsync(
37+
It.IsAny<string>(),
38+
It.IsAny<CancellationToken>()))
39+
.ReturnsAsync((string key, CancellationToken _) =>
40+
key == "testKey" ? "payload" : null);
3241

3342
_sharpConnectorClient = _mockClient.Object;
3443
}
@@ -72,7 +81,7 @@ public void Get()
7281
var insert = _sharpConnectorClient.Insert(key, "payload");
7382
Assert.IsTrue(insert);
7483
var obj = _sharpConnectorClient.Get(key);
75-
Assert.AreEqual(obj, "payload");
84+
Assert.AreEqual("payload", obj);
7685
}
7786

7887
[TestMethod]
@@ -82,7 +91,7 @@ public async Task GetAsync()
8291
var insert = _sharpConnectorClient.Insert(key, "payload");
8392
Assert.IsTrue(insert);
8493
var obj = await _sharpConnectorClient.GetAsync(key);
85-
Assert.AreEqual(obj, "payload");
94+
Assert.AreEqual("payload", obj);
8695
}
8796

8897
[TestMethod]
@@ -92,9 +101,8 @@ public void Update()
92101
var insert = _sharpConnectorClient.Insert(key, "payload");
93102
Assert.IsTrue(insert);
94103
var obj = _sharpConnectorClient.Get(key);
95-
Assert.AreEqual(obj, "payload");
104+
Assert.AreEqual("payload", obj);
96105

97-
// Set up mock for update method
98106
_mockClient.Setup(client => client.Update(key, "modPayload")).Returns(true);
99107
var update = _sharpConnectorClient.Update(key, "modPayload");
100108
Assert.IsTrue(update);
@@ -107,10 +115,14 @@ public async Task UpdateAsync()
107115
var insert = await _sharpConnectorClient.InsertAsync(key, "payload");
108116
Assert.IsTrue(insert);
109117
var obj = await _sharpConnectorClient.GetAsync(key);
110-
Assert.AreEqual(obj, "payload");
118+
Assert.AreEqual("payload", obj);
119+
120+
_mockClient.Setup(client => client.UpdateAsync(
121+
key,
122+
"modPayload",
123+
It.IsAny<CancellationToken>()))
124+
.ReturnsAsync(true);
111125

112-
// Mock async update behavior
113-
_mockClient.Setup(client => client.UpdateAsync(key, "modPayload")).ReturnsAsync(true);
114126
var update = await _sharpConnectorClient.UpdateAsync(key, "modPayload");
115127
Assert.IsTrue(update);
116128
}
@@ -122,9 +134,8 @@ public void Delete()
122134
var insert = _sharpConnectorClient.Insert(key, "payload");
123135
Assert.IsTrue(insert);
124136
var obj = _sharpConnectorClient.Get(key);
125-
Assert.AreEqual(obj, "payload");
137+
Assert.AreEqual("payload", obj);
126138

127-
// Mock delete behavior
128139
_mockClient.Setup(client => client.Delete(key)).Returns(true);
129140
var delete = _sharpConnectorClient.Delete(key);
130141
Assert.IsTrue(delete);
@@ -137,12 +148,15 @@ public async Task DeleteAsync()
137148
var insert = await _sharpConnectorClient.InsertAsync(key, "payload");
138149
Assert.IsTrue(insert);
139150
var obj = await _sharpConnectorClient.GetAsync(key);
140-
Assert.AreEqual(obj, "payload");
151+
Assert.AreEqual("payload", obj);
152+
153+
_mockClient.Setup(client => client.DeleteAsync(
154+
key,
155+
It.IsAny<CancellationToken>()))
156+
.ReturnsAsync(true);
141157

142-
// Mock async delete behavior
143-
_mockClient.Setup(client => client.DeleteAsync(key)).ReturnsAsync(true);
144158
var delete = await _sharpConnectorClient.DeleteAsync(key);
145159
Assert.IsTrue(delete);
146160
}
147161
}
148-
}
162+
}

src/SharpConnector.Tests/SharpConnector.Tests.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55

66
<IsPackable>false</IsPackable>
77

@@ -25,10 +25,10 @@
2525
</PropertyGroup>
2626

2727
<ItemGroup>
28-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
28+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
2929
<PackageReference Include="Moq" Version="4.20.72" />
30-
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
31-
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
30+
<PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
31+
<PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
3232
<PackageReference Include="coverlet.collector" Version="6.0.4">
3333
<PrivateAssets>all</PrivateAssets>
3434
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

src/SharpConnector/Connectors/ArangoDb/ArangoDbAccess.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ public async Task<bool> IsConnectedAsync()
4646
{
4747
try
4848
{
49-
var databases = await Client.Database.GetDatabasesAsync().ConfigureAwait(false);
49+
var databases = await Client.Database
50+
.GetDatabasesAsync()
51+
.ConfigureAwait(false);
5052
return !databases.Error;
5153
}
5254
catch (Exception)

0 commit comments

Comments
 (0)