BirdsiteLive/src/Tests/BirdsiteLive.DAL.Postgres.T.../DataAccessLayers/SyncTweetsPostgresDalTests.cs

183 lines
5.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BirdsiteLive.DAL.Postgres.DataAccessLayers;
using BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers.Base;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;
using BirdsiteLive.DAL.Models;
namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
{
[TestClass]
public class SyncTweetsPostgresDalTests : PostgresTestingBase
{
[TestInitialize]
public async Task TestInit()
{
var dal = new DbInitializerPostgresDal(_settings, _tools);
var init = new DatabaseInitializer(dal);
await init.InitAndMigrateDbAsync();
}
[TestCleanup]
public async Task CleanUp()
{
var dal = new DbInitializerPostgresDal(_settings, _tools);
await dal.DeleteAllAsync();
}
[TestMethod]
public async Task CreateAndGetTweets()
{
var tweet = new SyncTweet
{
Acct = "test",
PublishedAt = DateTime.UtcNow,
Inbox = "/inbox",
Host = "instance.ext",
TweetId = 4567889
};
var dal = new SyncTweetsPostgresDal(_settings);
var id = await dal.SaveTweetAsync(tweet);
var result = await dal.GetTweetAsync(id);
Assert.IsNotNull(result);
Assert.IsTrue(result.Id > 0);
Assert.AreEqual(tweet.Acct, result.Acct);
Assert.AreEqual(tweet.Inbox, result.Inbox);
Assert.AreEqual(tweet.Host, result.Host);
Assert.AreEqual(tweet.TweetId, result.TweetId);
Assert.IsTrue(Math.Abs((tweet.PublishedAt - result.PublishedAt).Seconds) < 5);
}
[TestMethod]
public async Task CreateDeleteAndGetTweets()
{
var tweet = new SyncTweet
{
Acct = "test",
PublishedAt = DateTime.UtcNow,
Inbox = "/inbox",
Host = "instance.ext",
TweetId = 4567889
};
var dal = new SyncTweetsPostgresDal(_settings);
var id = await dal.SaveTweetAsync(tweet);
await dal.DeleteTweetAsync(id);
var result = await dal.GetTweetAsync(id);
Assert.IsNull(result);
}
[TestMethod]
public async Task CreateAndGetTweetsByDate()
{
var now = DateTime.UtcNow;
var dal = new SyncTweetsPostgresDal(_settings);
var allData = new List<SyncTweet>();
for (var i = 0; i < 100; i++)
{
var tweet = new SyncTweet
{
Acct = "test",
PublishedAt = now.AddDays(-10 - i),
Inbox = "/inbox",
Host = "instance.ext",
TweetId = 4567889 + i
};
allData.Add(tweet);
await dal.SaveTweetAsync(tweet);
}
var date = now.AddDays(-20);
var result = await dal.GetTweetsOlderThanAsync(date, -1, 10);
Assert.IsNotNull(result);
Assert.IsTrue(result.Count == 10);
foreach (var res in result)
{
Assert.IsTrue(res.PublishedAt < date);
Assert.IsTrue(res.Id > 10);
Assert.IsTrue(res.Id < 25);
var original = allData.First(x => x.Acct == res.Acct && x.TweetId == res.TweetId);
Assert.AreEqual(original.Acct, res.Acct);
Assert.AreEqual(original.Inbox, res.Inbox);
Assert.AreEqual(original.Host, res.Host);
Assert.AreEqual(original.TweetId, res.TweetId);
Assert.IsTrue(Math.Abs((original.PublishedAt - res.PublishedAt).Seconds) < 5);
}
}
[TestMethod]
public async Task CreateAndGetTweetsByDate_Offset()
{
var now = DateTime.UtcNow;
var dal = new SyncTweetsPostgresDal(_settings);
for (var i = 0; i < 100; i++)
{
var tweet = new SyncTweet
{
Acct = "test",
PublishedAt = now.AddDays(-10 - i),
Inbox = "/inbox",
Host = "instance.ext",
TweetId = 4567889 + i
};
await dal.SaveTweetAsync(tweet);
}
var date = now.AddDays(-20);
var result = await dal.GetTweetsOlderThanAsync(date, 1000, 10);
Assert.IsNotNull(result);
Assert.IsTrue(result.Count == 0);
}
[TestMethod]
public async Task CreateAndGetTweetsByDate_Iteration()
{
var now = DateTime.UtcNow;
var dal = new SyncTweetsPostgresDal(_settings);
for (var i = 0; i < 100; i++)
{
var tweet = new SyncTweet
{
Acct = "test",
PublishedAt = now.AddDays(-10 - i),
Inbox = "/inbox",
Host = "instance.ext",
TweetId = 4567889 + i
};
await dal.SaveTweetAsync(tweet);
}
var date = now.AddDays(-20);
var result = await dal.GetTweetsOlderThanAsync(date, -1, 10);
var result2 = await dal.GetTweetsOlderThanAsync(date, result.Last().Id, 10);
var global = result.ToList();
global.AddRange(result2);
var d = global.GroupBy(x => x.Id).Count();
Assert.AreEqual(20, d);
foreach (var res in global)
{
Assert.IsTrue(res.PublishedAt < date);
Assert.IsTrue(res.Id > 10);
Assert.IsTrue(res.Id < 35);
}
}
}
}