﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Platnosci.Models;
using Platnosci.Core;
using Platnosci.Core.Interface;
using Platnosci.Core.Linq;

namespace Platnosci.Tests.Web
{
    [TestFixture]
    class eCardDataTests
    { 
        private readonly Function _function = new Function();
        [Test]
        [Category("Unit")]
        public void Set_Hash_Return_zlyHash(){
            var repPayment = new Repository<PlatnosciEcard>(new FakeDataContext());
            var platnosc = _function.CreateNewPayment(123, true, DateTime.Now, 1);
            repPayment.Insert(platnosc);
           
            var ecarddata = new eCardData(repPayment);
           
            var merchant = new Merchant(){
                Payment = platnosc,
                Id = "171485000",
                Password = "ashSeth2",
            };
            var result = ecarddata.SetHash(merchant);
            Assert.That(result, Is.EqualTo(Merchant.BAD_HASH));
        }
        [Test]
        [Category("Unit")]
        public void Set_Hash_Return_Payment_Is_Null()
        {
            var repPayment = new Repository<PlatnosciEcard>(new FakeDataContext());
            var platnosc = _function.CreateNewPayment(123, true, DateTime.Now, 1);
            
            repPayment.Insert(platnosc);

            var ecarddata = new eCardData(repPayment);

            var merchant = new Merchant()
            {
                Payment = new PlatnosciEcard(){
                    ORDERDESCRIPTION = "dd",
                    IDFaktury = 21,
                    Data = DateTime.Now
                },
                Id = "171485000",
                Password = "ashSeth2",
            };
            var result = ecarddata.SetHash(merchant);
            Assert.That(result, Is.EqualTo(Merchant.HASH_ERROR_INFO));
        }
        [Test]
        [Category("Unit")]
        public void Set_Hash_Return_Correct_Hash()
        {
            var repPayment = new Repository<PlatnosciEcard>(new FakeDataContext());
            var platnosc = _function.CreateNewPayment(123, true, DateTime.Now, 1);
            platnosc.AMOUNT = 229;
            platnosc.CURRENCY = FunkcjePlatnosci.PLN;

            repPayment.Insert(platnosc);

            var ecarddata = new eCardData(repPayment);

            var merchant = new Merchant()
            {
                Payment = platnosc,
                Id = "171485000",
                Password = "ashSeth2",
            };
            var result = ecarddata.SetHash(merchant);
            Assert.That(result.Length, Is.EqualTo(48) );
        }
        [Test]
        [Category("Unit")]
        public void Set_Hash_Amount_Zero_Return_zlyHash()
        {
            var repPayment = new Repository<PlatnosciEcard>(new FakeDataContext());
            var platnosc = _function.CreateNewPayment(123, true, DateTime.Now, 1);
            platnosc.AMOUNT = 0;
            platnosc.CURRENCY = FunkcjePlatnosci.PLN;

            repPayment.Insert(platnosc);

            var ecarddata = new eCardData(repPayment);

            var merchant = new Merchant()
            {
                Payment = platnosc,
                Id = "171485000",
                Password = "ashSeth2",
            };
            var result = ecarddata.SetHash(merchant);
            Assert.That(result, Is.EqualTo(Merchant.BAD_HASH));
        }
        [Test]
        [Category("Unit")]
        public void Set_Hash_Bad_Password_Return_zlyHash()
        {
            var repPayment = new Repository<PlatnosciEcard>(new FakeDataContext());
            var platnosc = _function.CreateNewPayment(123, true, DateTime.Now, 1);
            platnosc.AMOUNT = 229;
            platnosc.CURRENCY = FunkcjePlatnosci.PLN;

            repPayment.Insert(platnosc);

            var ecarddata = new eCardData(repPayment);

            var merchant = new Merchant()
            {
                Payment = platnosc,
                Id = "TEST",
                Password = "test",
            };
            var result = ecarddata.SetHash(merchant);
            Assert.That(result, Is.EqualTo(Merchant.BAD_HASH));
        }
    }
}
