Commit 0f2257ab authored by Marek Vrbka's avatar Marek Vrbka
Browse files

Fix test and added another one for no difference records

parent dd55473b
Loading
Loading
Loading
Loading
Loading
+51 −15
Original line number Diff line number Diff line
@@ -14,33 +14,69 @@ namespace StockAdvisory.Tests;

public class StockEmailSenderTests
{
    [Test]
    public async Task Test_When_SubscriberEmailsAndRecordsArePassed_EmailsGetSent()
    private ISender _sender = A.Fake<ISender>();
    private IFluentEmailFactory _factory = A.Fake<IFluentEmailFactory>();
    private IStockFormatter _formatter = A.Fake<IStockFormatter>();
    private StockEmailSender _stockSender;
    
    
    [SetUp]
    public void SetUp()
    {
        _factory = A.Fake<IFluentEmailFactory>();
        _sender = A.Fake<ISender>();
        _formatter = A.Fake<IStockFormatter>();
        A.CallTo(() => _factory.Create())
            .ReturnsLazily(_ => new Email(new ReplaceRenderer(), _sender));
        A.CallTo(() => _formatter.Format(A<IEnumerable<StockDifferenceRecord>>._))
            .Returns("Mock format");
        _stockSender = new StockEmailSender(_factory, _formatter);
    }

    public void SendNoErrorsOnSend()
    {
        var sender = A.Fake<ISender>();
        A.CallTo(() => sender.SendAsync(A<IFluentEmail>.Ignored, A<CancellationToken?>.Ignored))
        A.CallTo(() => _sender.SendAsync(A<IFluentEmail>.Ignored, A<CancellationToken?>.Ignored))
            .WithAnyArguments()
            .Returns(Task.FromResult(new SendResponse())); 
        A.CallTo(() => _sender.Send(A<IFluentEmail>.Ignored, A<CancellationToken?>.Ignored))
            .WithAnyArguments()
            .Returns(new SendResponse());
    }
    
        var factory = A.Fake<IFluentEmailFactory>();
        A.CallTo(() => factory.Create())
            .ReturnsLazily(_ => new Email(new ReplaceRenderer(), sender));
    
        var formatter = A.Fake<IStockFormatter>();
        var records = new List<StockDifferenceRecord>() {new StockDifferenceRecord()};
        A.CallTo(() => formatter.Format(records)).Returns("Mock Format");
    [Test]
    public async Task Test_When_SubscriberEmailsAndRecordsArePassed_Then_EmailsGetSent()
    {
        SendNoErrorsOnSend();

        var records = new List<StockDifferenceRecord>() {new StockDifferenceRecord()};
        var clients = new List<string>() {"t@e.sting", "sample@email"};

        var stockSender = new StockEmailSender(factory, formatter);
        await stockSender.SendReports(clients, records);
        await _stockSender.SendReports(clients, records);
        
        // Makes sure that two emails were sent, each separately for each address
        A.CallTo(() =>
                sender.SendAsync(
                _sender.SendAsync(
                    A<IFluentEmail>.That.Matches(e =>
                        e.Data.ToAddresses.Select(a => a.EmailAddress).Intersect(clients).Count() == 1),
                    A<CancellationToken?>.Ignored))
            .MustHaveHappenedTwiceExactly();
    }

    [Test]
    public async Task Test_WhenNoStockDifferencesArePassed_Then_NoEmailsAreSent()
    {
        SendNoErrorsOnSend();
        var clients = new List<string>() {"t@e.sting", "sample@email"};
        var records = new List<StockDifferenceRecord>();

        A.CallTo(() => _formatter.Format(A<IEnumerable<StockDifferenceRecord>>._))
            .Returns(String.Empty);
        await _stockSender.SendReports(clients, records);
        
        A.CallTo(() =>
            _sender.SendAsync(A<IFluentEmail>._, A<CancellationToken>._))
            .WithAnyArguments()
            .MustNotHaveHappened();
    }
}
 No newline at end of file
+5 −0
Original line number Diff line number Diff line
using System.ComponentModel.DataAnnotations;
using FluentEmail.Core;
using FluentEmail.Core.Models;
using Microsoft.VisualBasic;


namespace StockAdvisory;
@@ -20,6 +21,10 @@ public class StockEmailSender
        IEnumerable<StockDifferenceRecord> records)
    {
        var formattedRecords = _formatter.Format(records);
        if (formattedRecords == String.Empty)
        {
            return new List<SendResponse>();
        }
        IEnumerable<Task<SendResponse>> tasks = subscriberEmails.Select(subscriber =>
            _emailFactory.Create()
                .SetFrom("noreply@stockanalysis.testing")