BirdsiteLive/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/Federation/RetrieveTweetsProcessorTest...

235 lines
7.5 KiB
C#
Raw Normal View History

2021-01-23 03:23:27 +01:00
using System;
using System.Linq;
2020-10-11 00:35:23 +02:00
using System.Threading;
using System.Threading.Tasks;
using BirdsiteLive.DAL.Contracts;
using BirdsiteLive.DAL.Models;
2021-09-05 20:10:46 +02:00
using BirdsiteLive.Pipeline.Models;
using BirdsiteLive.Pipeline.Processors.Federation;
2020-10-11 00:35:23 +02:00
using BirdsiteLive.Twitter;
using BirdsiteLive.Twitter.Models;
2021-02-02 06:38:48 +01:00
using Microsoft.Extensions.Logging;
2020-10-11 00:35:23 +02:00
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
namespace BirdsiteLive.Pipeline.Tests.Processors
{
[TestClass]
public class RetrieveTweetsProcessorTests
{
[TestMethod]
public async Task ProcessAsync_UserNotSync_Test()
{
#region Stubs
var user1 = new SyncTwitterUser
{
Id = 1,
Acct = "acct",
LastTweetPostedId = -1
};
2021-09-05 20:10:46 +02:00
var user1WtData = new UserWithDataToSync
{
User = user1,
};
2020-10-11 00:35:23 +02:00
var users = new[]
{
2021-09-05 20:10:46 +02:00
user1WtData
2020-10-11 00:35:23 +02:00
};
var tweets = new[]
{
new ExtractedTweet
{
Id = 47
}
};
#endregion
#region Mocks
var twitterServiceMock = new Mock<ITwitterTweetsService>(MockBehavior.Strict);
2020-10-11 00:35:23 +02:00
twitterServiceMock
.Setup(x => x.GetTimeline(
It.Is<string>(y => y == user1.Acct),
It.Is<int>(y => y == 1),
It.Is<long>(y => y == -1)
))
.Returns(tweets);
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
twitterUserDalMock
.Setup(x => x.UpdateTwitterUserAsync(
It.Is<int>(y => y == user1.Id),
It.Is<long>(y => y == tweets.Last().Id),
2021-01-23 03:23:27 +01:00
It.Is<long>(y => y == tweets.Last().Id),
2021-09-05 20:10:46 +02:00
It.Is<int>(y => y == 0),
2022-11-04 01:02:37 +01:00
It.IsAny<DateTime>(),
It.Is<string>(y => y == null),
2022-12-14 04:55:22 +01:00
It.Is<string>(y => y == null),
It.Is<bool>(y => y == false)
2020-10-11 00:35:23 +02:00
))
.Returns(Task.CompletedTask);
2021-02-02 06:38:48 +01:00
2021-02-03 04:49:37 +01:00
var twitterUserServiceMock = new Mock<ICachedTwitterUserService>(MockBehavior.Strict);
2021-02-02 06:38:48 +01:00
var logger = new Mock<ILogger<RetrieveTweetsProcessor>>(MockBehavior.Strict);
2020-10-11 00:35:23 +02:00
#endregion
2021-02-02 06:38:48 +01:00
var processor = new RetrieveTweetsProcessor(twitterServiceMock.Object, twitterUserDalMock.Object, twitterUserServiceMock.Object, logger.Object);
2020-10-11 00:35:23 +02:00
var usersResult = await processor.ProcessAsync(users, CancellationToken.None);
#region Validations
twitterServiceMock.VerifyAll();
twitterUserDalMock.VerifyAll();
2021-02-02 06:38:48 +01:00
twitterUserServiceMock.VerifyAll();
logger.VerifyAll();
2020-10-11 00:35:23 +02:00
Assert.AreEqual(0, usersResult.Length);
#endregion
}
[TestMethod]
public async Task ProcessAsync_UserSync_Test()
{
#region Stubs
var user1 = new SyncTwitterUser
{
Id = 1,
Acct = "acct",
LastTweetPostedId = 46,
LastTweetSynchronizedForAllFollowersId = 46
};
2021-09-05 20:10:46 +02:00
var user1WtData = new UserWithDataToSync
{
User = user1,
};
2020-10-11 00:35:23 +02:00
var users = new[]
{
2021-09-05 20:10:46 +02:00
user1WtData
2020-10-11 00:35:23 +02:00
};
var tweets = new[]
{
new ExtractedTweet
{
Id = 47
},
new ExtractedTweet
{
Id = 48
},
new ExtractedTweet
{
Id = 49
}
};
#endregion
#region Mocks
var twitterServiceMock = new Mock<ITwitterTweetsService>(MockBehavior.Strict);
2020-10-11 00:35:23 +02:00
twitterServiceMock
.Setup(x => x.GetTimeline(
It.Is<string>(y => y == user1.Acct),
It.Is<int>(y => y == 200),
It.Is<long>(y => y == user1.LastTweetSynchronizedForAllFollowersId)
))
.Returns(tweets);
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
2021-02-02 06:38:48 +01:00
2021-02-03 04:49:37 +01:00
var twitterUserServiceMock = new Mock<ICachedTwitterUserService>(MockBehavior.Strict);
2021-02-02 06:38:48 +01:00
var logger = new Mock<ILogger<RetrieveTweetsProcessor>>(MockBehavior.Strict);
2020-10-11 00:35:23 +02:00
#endregion
2021-02-02 06:38:48 +01:00
var processor = new RetrieveTweetsProcessor(twitterServiceMock.Object, twitterUserDalMock.Object, twitterUserServiceMock.Object, logger.Object);
2020-10-11 00:35:23 +02:00
var usersResult = await processor.ProcessAsync(users, CancellationToken.None);
#region Validations
twitterServiceMock.VerifyAll();
twitterUserDalMock.VerifyAll();
2021-02-02 06:38:48 +01:00
twitterUserServiceMock.VerifyAll();
logger.VerifyAll();
2020-10-11 00:35:23 +02:00
Assert.AreEqual(users.Length, usersResult.Length);
2021-09-05 20:10:46 +02:00
Assert.AreEqual(users[0].User.Acct, usersResult[0].User.Acct);
2020-10-11 00:35:23 +02:00
Assert.AreEqual(tweets.Length, usersResult[0].Tweets.Length);
#endregion
}
[TestMethod]
public async Task ProcessAsync_UserPartiallySync_Test()
{
#region Stubs
var user1 = new SyncTwitterUser
{
Id = 1,
Acct = "acct",
LastTweetPostedId = 49,
LastTweetSynchronizedForAllFollowersId = 46
};
2021-09-05 20:10:46 +02:00
var user1WtData = new UserWithDataToSync
{
User = user1,
};
2020-10-11 00:35:23 +02:00
var users = new[]
{
2021-09-05 20:10:46 +02:00
user1WtData
2020-10-11 00:35:23 +02:00
};
var tweets = new[]
{
new ExtractedTweet
{
Id = 47
},
new ExtractedTweet
{
Id = 48
},
new ExtractedTweet
{
Id = 49
}
};
#endregion
#region Mocks
var twitterServiceMock = new Mock<ITwitterTweetsService>(MockBehavior.Strict);
2020-10-11 00:35:23 +02:00
twitterServiceMock
.Setup(x => x.GetTimeline(
It.Is<string>(y => y == user1.Acct),
It.Is<int>(y => y == 200),
It.Is<long>(y => y == user1.LastTweetSynchronizedForAllFollowersId)
))
.Returns(tweets);
var twitterUserDalMock = new Mock<ITwitterUserDal>(MockBehavior.Strict);
2021-02-02 06:38:48 +01:00
2021-02-03 04:49:37 +01:00
var twitterUserServiceMock = new Mock<ICachedTwitterUserService>(MockBehavior.Strict);
2021-02-02 06:38:48 +01:00
var logger = new Mock<ILogger<RetrieveTweetsProcessor>>(MockBehavior.Strict);
2020-10-11 00:35:23 +02:00
#endregion
2021-02-02 06:38:48 +01:00
var processor = new RetrieveTweetsProcessor(twitterServiceMock.Object, twitterUserDalMock.Object, twitterUserServiceMock.Object, logger.Object);
2020-10-11 00:35:23 +02:00
var usersResult = await processor.ProcessAsync(users, CancellationToken.None);
#region Validations
twitterServiceMock.VerifyAll();
twitterUserDalMock.VerifyAll();
2021-02-02 06:38:48 +01:00
twitterUserServiceMock.VerifyAll();
logger.VerifyAll();
2020-10-11 00:35:23 +02:00
Assert.AreEqual(users.Length, usersResult.Length);
2021-09-05 20:10:46 +02:00
Assert.AreEqual(users[0].User.Acct, usersResult[0].User.Acct);
2020-10-11 00:35:23 +02:00
Assert.AreEqual(tweets.Length, usersResult[0].Tweets.Length);
#endregion
}
}
}