Skip to content

Commit

Permalink
add tests, update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
pwelter34 committed Feb 3, 2025
1 parent dd895f5 commit c44ff76
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 3 deletions.
103 changes: 103 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,106 @@ More information about NuGet package available at
* base class for generic MongoDB entity; `MongoEntity`
* interface for generic MongoDB entity repository; `IMongoEntityRepository<TEntity>`
* base class for generic MongoDB entity repository; `MongoEntityRepostiory<TEntity>`

### Configuration

Register with dependency injection

```c#
services.AddMongoDB("mongodb://localhost:27017/UnitTesting");
```

Register using a connection name from the appsettings.json

```c#
services.AddMongoDB("UnitTesting");
```

```json
{
"ConnectionStrings": {
"UnitTesting": "mongodb://localhost:27017/UnitTesting"
}
}
```

### Usage

Find an entity by key

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

// find by key
var role = await roleRepo.FindAsync("67a0dc52fa5ebe49f293a374");
```

Find one entity with query

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

// find one by query expression
var role = await roleRepo.FindOneAsync(r => r.Name.StartsWith("Admin"))
```

Find many with query

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

// find one by query expression
var roles = await roleRepo.FindAllAsync(r => r.Name.StartsWith("Admin"))
```

Use `IQueryable`

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

// Use IQueryable
var roles = roleRepo.All()
.Where(r => r.IsActive)
.ToList();
```

Insert entity

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

var role = new Role { Name = "CreateReadRole" };

var createdRole = await roleRepo.InsertAsync(role);
```

Update entity

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

// find by key
var role = await roleRepo.FindAsync("67a0dc52fa5ebe49f293a374");

// make changes
role.Name = "UpdateRole";

var updateRole = await roleRepo.UpdateAsync(role);
```

Delete entity by key

```c#
// dependency inject
var roleRepo = Services.GetRequiredService<IMongoEntityRepository<Role>>();

// items deleted
var count = await roleRepo.DeleteAsync("67a0dc52fa5ebe49f293a374");
```

2 changes: 1 addition & 1 deletion src/MongoDB.Abstracts/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public static IServiceCollection AddMongoDB(this IServiceCollection services, st

private static string ResolveConnectionString(IServiceProvider serviceProvider, string nameOrConnectionString)
{
var isConnectionString = nameOrConnectionString.IndexOfAny([';', '=']) > 0;
var isConnectionString = nameOrConnectionString.IndexOfAny([';', '=', ':', '/']) > 0;
if (isConnectionString)
return nameOrConnectionString;

Expand Down
1 change: 1 addition & 0 deletions test/MongoDB.Abstracts.Tests/DatabaseFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ protected override void ConfigureApplication(HostApplicationBuilder builder)
var services = builder.Services;

services.AddMongoDB("MongoUnitTest");
services.AddMongoDB("mongodb://localhost:27017/UnitTesting", "MongoUnitTest");

services.AddMongoDBAbstractsTests();
}
Expand Down
37 changes: 35 additions & 2 deletions test/MongoDB.Abstracts.Tests/UserRepositoryTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public UserRepositoryTest(ITestOutputHelper output, DatabaseFixture databaseFixt
[Fact]
public void ResolveMongoDatabase()
{
var cosmosFactory = Services.GetRequiredService<IMongoDatabase>();
cosmosFactory.Should().NotBeNull();
var mongoDatabase = Services.GetRequiredService<IMongoDatabase>();
mongoDatabase.Should().NotBeNull();
}

[Fact]
Expand All @@ -28,6 +28,13 @@ public void ResolveMongoEntityRepository()
mongoEntityRepo.Should().BeOfType<UserRepository>();
}

[Fact]
public void ResolveMongoEntityQuery()
{
var mongoEntityRepo = Services.GetRequiredService<IMongoEntityQuery<User>>();
mongoEntityRepo.Should().NotBeNull();
}

[Fact]
public void ResolveIUserRepository()
{
Expand Down Expand Up @@ -60,4 +67,30 @@ public void ResolveUserRepository()
userClassRepo.Should().NotBeNull();
userClassRepo.Should().BeOfType<UserRepository>();
}




[Fact]
public void ResolveMongoDatabaseWithServiceKey()
{
var mongoDatabase = Services.GetRequiredKeyedService<IMongoDatabase>("MongoUnitTest");
mongoDatabase.Should().NotBeNull();
}

[Fact]
public void ResolveMongoEntityRepositoryWithServiceKey()
{
var mongoEntityRepo = Services.GetRequiredKeyedService<IMongoEntityRepository<User>>("MongoUnitTest");
mongoEntityRepo.Should().NotBeNull();
}

[Fact]
public void ResolveMongoEntityQueryWithServiceKey()
{
var mongoEntityRepo = Services.GetRequiredKeyedService<IMongoEntityQuery<User>>("MongoUnitTest");
mongoEntityRepo.Should().NotBeNull();
}


}

0 comments on commit c44ff76

Please sign in to comment.