Skip to content

Commit

Permalink
PointsService tests - cleanup, improve a test, add a test
Browse files Browse the repository at this point in the history
  • Loading branch information
adelikat committed Jun 26, 2024
1 parent 69fafeb commit 653251d
Showing 1 changed file with 46 additions and 16 deletions.
62 changes: 46 additions & 16 deletions tests/TASVideos.Core.Tests/Services/PointsServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,26 @@ public PointsServiceTests()
}

[TestMethod]
public async Task PlayerPoints_NoUser_Returns0()
public async Task PlayerPoints_NoUser_ReturnsZero()
{
var (actual, _) = await _pointsService.PlayerPoints(int.MinValue);
Assert.AreEqual(0, actual);
}

[TestMethod]
public async Task PlayerPoints_UserWithNoMovies_Returns0()
public async Task PlayerPoints_UserWithNoMovies_ReturnsZero()
{
_db.AddUser(1, Author);
var user = _db.AddUser(1, Author);
await _db.SaveChangesAsync();
var user = _db.Users.Single();
var (actual, _) = await _pointsService.PlayerPoints(user.Id);
var (actual, _) = await _pointsService.PlayerPoints(user.Entity.Id);
Assert.AreEqual(0, actual);
}

[TestMethod]
public async Task PlayerPoints_NoRatings_MinimumPointsReturned()
{
const int numMovies = 2;

_db.AddUser(1, Author);
var user = _db.AddUser(1, Author);
var publicationClass = new PublicationClass { Weight = 1, Name = "Test" };
_db.PublicationClasses.Add(publicationClass);
for (int i = 0; i < numMovies; i++)
Expand All @@ -46,45 +44,77 @@ public async Task PlayerPoints_NoRatings_MinimumPointsReturned()
}

await _db.SaveChangesAsync();
var user = _db.Users.Single();
var pa = _db.Publications
.ToList()
.Select(p => new PublicationAuthor
{
PublicationId = p.Id,
UserId = user.Id
UserId = user.Entity.Id
})
.ToList();

_db.PublicationAuthors.AddRange(pa);
await _db.SaveChangesAsync();

var (actual, _) = await _pointsService.PlayerPoints(user.Id);
var (actual, _) = await _pointsService.PlayerPoints(user.Entity.Id);

const int expected = numMovies * PlayerPointConstants.MinimumPlayerPointsForPublication;
Assert.AreEqual(expected, actual);
}

[TestMethod]
public async Task PlayerPoints_OnlyObsoletedPublications_NonZero()
public async Task PlayerPoints_OnlyObsoletedPublications_NearZero()
{
_db.AddUser(1, Author);
var user = _db.AddUser(1, Author);
var publicationClass = new PublicationClass { Weight = 1, Name = "Test" };
_db.PublicationClasses.Add(publicationClass);
await _db.SaveChangesAsync();

var user = _db.Users.Single();
var newPub = new Publication();
var oldPub = new Publication
{
Authors = [new PublicationAuthor { UserId = user.Id }],
Authors = [new PublicationAuthor { UserId = user.Entity.Id }],
ObsoletedBy = newPub,
PublicationClass = publicationClass
};
_db.Publications.Add(oldPub);
_db.Publications.Add(newPub);
await _db.SaveChangesAsync();

var (actual, _) = await _pointsService.PlayerPoints(user.Id);
var (actual, _) = await _pointsService.PlayerPoints(user.Entity.Id);
Assert.IsTrue(actual > 0);
Assert.IsTrue(actual < 0.5);
}

[TestMethod]
public async Task PlayerPoints_PassesWeightMultiplier()
{
// 2 authors, 1 for a non-weighted pub and 1 for a weighted pub
var author1 = _db.AddUser(1, Author);
var author2 = _db.AddUser(2, Author);
var nonWeightedClass = new PublicationClass { Id = 1, Weight = 1, Name = "Regular" };
var weightedClass = new PublicationClass { Id = 2, Weight = 100, Name = "Weighted" };
_db.PublicationClasses.Add(nonWeightedClass);
_db.PublicationClasses.Add(weightedClass);
var pubNonWeighted = _db.Publications.Add(new Publication
{
Authors = [new PublicationAuthor { UserId = author1.Entity.Id }],
PublicationClass = nonWeightedClass
});
var pubWeighted = _db.Publications.Add(new Publication
{
Authors = [new PublicationAuthor { UserId = author2.Entity.Id }],
PublicationClass = weightedClass
});
await _db.SaveChangesAsync();

// 3rd User rates each publication equally
var rater = _db.AddUser(3);
_db.PublicationRatings.Add(new PublicationRating { Publication = pubNonWeighted.Entity, User = rater.Entity, Value = 10 });
_db.PublicationRatings.Add(new PublicationRating { Publication = pubWeighted.Entity, User = rater.Entity, Value = 10 });
await _db.SaveChangesAsync();

var (actualNonWeighted, _) = await _pointsService.PlayerPoints(author1.Entity.Id);
var (actualWeighted, _) = await _pointsService.PlayerPoints(author2.Entity.Id);
Assert.AreEqual(actualWeighted, actualNonWeighted * 100, 10);
}
}

0 comments on commit 653251d

Please sign in to comment.