Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jeff Campbell #254

Closed
wants to merge 9 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions RateLimiter.Tests/Interfaces/IConfigService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using RateLimiter.Data.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace RateLimiter.Tests.Interfaces
{
// The config service is intended to add data to the database
// for testing purposes.

public interface IConfigService
{
public Task Reset();
public Task SeedResources(List<Resource> resources);
public Task SeedUsers(List<User> users);
public Task SeedRequests(List<Request> requests);
public Task SeedLimiterRules(List<LimiterRule> limiterRules);
}
}
14 changes: 14 additions & 0 deletions RateLimiter.Tests/Interfaces/IDataGeneratorService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using RateLimiter.Data.Models;
using System;
using System.Collections.Generic;

namespace RateLimiter.Tests.Interfaces
{
public interface IDataGeneratorService
{
public Request GenerateRequest(int id, Resource resource, User user, string identifier, bool? wasHandled);
public Resource GenerateResource(int id, string name, Status status, List<LimiterRule> limiterRules);
public User GenerateUser(int id, string name, Guid token, string tokenSource, bool isPriorityUser);
public LimiterRule GenerateLimiterRule(int id, string name, string? tokenSource, int? resourceStatusId, int? numPerTimespan, int? numSeconds, bool? isPriorityUser);
}
}
1 change: 1 addition & 0 deletions RateLimiter.Tests/RateLimiter.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<ProjectReference Include="..\RateLimiter\RateLimiter.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.36" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2" />
Expand Down
13 changes: 0 additions & 13 deletions RateLimiter.Tests/RateLimiterTest.cs

This file was deleted.

85 changes: 85 additions & 0 deletions RateLimiter.Tests/Services/ConfigService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using RateLimiter.Data;
using RateLimiter.Data.CodeValues;
using RateLimiter.Data.Contexts;
using RateLimiter.Data.Models;
using RateLimiter.Tests.Interfaces;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace RateLimiter.Tests.Services
{
public class ConfigService : IConfigService
{
private readonly RateLimiterDbContext _context;

public ConfigService(RateLimiterDbContext context)
{
_context = context;

// Make sure statuses are in the db. Should be handled in a db initializer but ran out of time.
var statusesCount = _context.Statuses.Count();

if (statusesCount == 0)
{
foreach (var status in Statuses.Values)
{
_context.Statuses.Add(status);
}
_context.SaveChanges();
}
}
public async Task Reset()
{
foreach (var request in _context.Requests)
{
_context.Requests.Remove(request);
}
foreach (var resource in _context.Resources)
{
_context.Resources.Remove(resource);
}
foreach (var user in _context.Users)
{
_context.Users.Remove(user);
}
foreach (var limiterRule in _context.LimiterRules)
{
_context.LimiterRules.Remove(limiterRule);
}
await _context.SaveChangesAsync();
}
public async Task SeedResources(List<Resource> resources)
{
foreach (var resource in resources)
{
_context.Resources.Add(resource);
}
await _context.SaveChangesAsync();
}
public async Task SeedUsers(List<User> users)
{
foreach (var user in users)
{
_context.Users.Add(user);
}
await _context.SaveChangesAsync();
}
public async Task SeedRequests(List<Request> requests)
{
foreach (var request in requests)
{
_context.Requests.Add(request);
};
await _context.SaveChangesAsync();
}
public async Task SeedLimiterRules(List<LimiterRule> limiterRules)
{
foreach (var limiterRule in limiterRules)
{
_context.LimiterRules.Add(limiterRule);
};
await _context.SaveChangesAsync();
}
}
}
81 changes: 81 additions & 0 deletions RateLimiter.Tests/Services/DataGeneratorService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using NUnit.Framework;
using RateLimiter.Data.Models;
using RateLimiter.Tests.Interfaces;
using System;
using System.Collections.Generic;

namespace RateLimiter.Tests.Services
{
internal class DataGeneratorService : IDataGeneratorService
{
public Request GenerateRequest(int id, Resource resource, User user, string identifier, bool? wasHandled)
{
var request = new Request
{
Id = id,
Identifier = identifier,
RequestDate = DateTime.Now,
ResourceId = resource.Id,
Resource = resource,
UserId = user.Id,
User = user,
WasHandled = wasHandled,
CreatedBy = user.Name,
CreatedDate = DateTime.Now
};

return request;
}
public Resource GenerateResource(int id, string name, Status status, List<LimiterRule> limiterRules)
{
var resource = new Resource
{
Id = id,
Identifier = name,
Name = name,
Description = name,
Status = status,
LimiterRules = limiterRules,
CreatedBy = "DataGenerator",
CreatedDate = DateTime.Now
};

return resource;
}
public User GenerateUser(int id, string username, Guid token, string tokenSource, bool isPriorityUser)
{
var user = new User
{
Id = id,
Identifier = token.ToString(), // small hack - Find() only works with attributes in the BaseModel so user token must reside in the Identifier for now.
Name = username,
Token = token.ToString(),
TokenSource = tokenSource,
IsPriorityUser = isPriorityUser,
Email = string.Format("{0}@phonyEmail.com", username),
CreatedBy = "DataGenerator",
CreatedDate = DateTime.Now
};

return user;
}
public LimiterRule GenerateLimiterRule(int id, string name, string? tokenSource, int? resourceStatusId, int? numPerTimespan, int? numSeconds, bool? isPriorityUser)
{
var limiterRule = new LimiterRule
{
Id = id ,
Identifier = name ,
IsPriorityUser = isPriorityUser ,
Name = name ,
TokenSource = tokenSource ,
ResourceStatusId = resourceStatusId ,
NumPerTimespan = numPerTimespan ,
NumSeconds = numSeconds,
CreatedBy = "DataGenerator",
CreatedDate = DateTime.Now
};

return limiterRule;
}
}
}
Loading
Loading