﻿using System.Linq;
using NUnit.Framework;
using Platnosci.Models;
using Platnosci.Core.Linq;
using Platnosci.Core.Interface;


namespace Platnosci.Tests.Web
{
    [TestFixture]
    class FunkcjePlatnosciTests
    {
        private readonly Function _function = new Function();
        private readonly ITranslateManager _translateManager = new FakeTranslation();

        [Test, Sequential]
        [Category("Unit")]
        public void GetCurrency_Returns_Correct_Currency(
            [Values(null, "", "eur", "usd", "gbp", "GBP")] string input,
            [Values(FunkcjePlatnosci.PLN, FunkcjePlatnosci.PLN, FunkcjePlatnosci.EUR, FunkcjePlatnosci.USD, FunkcjePlatnosci.GBP, FunkcjePlatnosci.GBP)] string output
            )
        {
            //Arrange
            var funkcjePlantosi = new FunkcjePlatnosci();

            //Act
            var result = funkcjePlantosi.GetCurrency(input);

            //Assert
            Assert.That(result, Is.EqualTo(output));
        }

        [Test]
        [Category("Unit")]
        public void CreateAndAddNewPayment_Creates_PlatnosciEcard()
        {
            //Arrange
            var idFaktury = 123;
            var repPayment = new Repository<PlatnosciEcard>(new FakeDataContext());
            var funkcjePlatnosci = new FunkcjePlatnosci(repPayment, _translateManager);
            var invoice = _function.CreateInvoice(idFaktury, "nip", "abc/2009", 200, 2);
            var payer = _function.CreatePayer(idFaktury, "test", "test");
            var waluta = new Waluta { Amount = 200, Currency = FunkcjePlatnosci.PLN };

            //Act
            funkcjePlatnosci.CreateAndAddNewPyment(invoice, waluta, payer, "sessionId");
            var payment = repPayment.Find(p => p.IDFaktury == 123).SingleOrDefault();

            //Act
            Assert.That(payment.AMOUNT, Is.EqualTo(200));
        }
    }
}
