コード例 #1
0
ファイル: RetraitRéalisé.cs プロジェクト: SteinTheo/csKoans
 public RetraitRéalisé(string numéroDeCompte, Montant montantRetrait, DateTime dateRetrait)
     : this()
 {
     NuméroDeCompte = numéroDeCompte;
     MontantRetrait = montantRetrait;
     _dateRetrait = dateRetrait;
 }
コード例 #2
0
ファイル: DépotRéalisé.cs プロジェクト: SteinTheo/csKoans
 public DépotRéalisé(string numéroDeCompte, Montant montantDepot, DateTime dateDepot)
     : this()
 {
     _numéroDeCompte = numéroDeCompte;
     MontantDepot = montantDepot;
     _dateDepot = dateDepot;
 }
コード例 #3
0
ファイル: PatternsTests.cs プロジェクト: SteinTheo/csKoans
        public void EtantDonnéUnCompteBancaireNonApprovisionnéFaireUnRetraitSansDépasserSonAutorisationDeCreditSuffisanteProduitDeuxEvenements()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 10), new DépotRéalisé(_numéroDeCompte, new Montant(5), DateTime.Now));
            var montantRetrait = new Montant(10);
            var dateRetrait = DateTime.Now;
            var evenements = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait); // retourne un IEnumerable<IEvénémentMétier> contenant l'événement RetraitRealisé

            Check.That(evenements).ContainsExactly<IEvénementMétier>(new RetraitRéalisé(_numéroDeCompte, montantRetrait, dateRetrait), new BalanceNégativeDétectée(_numéroDeCompte, new Montant(5), dateRetrait));
        }
コード例 #4
0
ファイル: PatternsTests.cs プロジェクト: SteinTheo/csKoans
        public void EtantDonnéUnCompteBancaireInitialiséViaEventSourcingFaireUnRetraitEnDehorsDeLAutorisationDeCreditLèveUneException()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 10), new DépotRéalisé(_numéroDeCompte, new Montant(5), DateTime.Now));
            var montantRetrait = new Montant(30);
            var dateRetrait = DateTime.Now;
            var evenements = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait);

            Check.That(evenements).IsEmpty();
        }
コード例 #5
0
ファイル: PatternsTests.cs プロジェクト: SteinTheo/csKoans
        public void EtantDonnéUnCompteBancaireFaireUnRetraitAvecProvisionSuffisanteProduitUnEvenement()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 0), new DépotRéalisé(_numéroDeCompte, new Montant(100), DateTime.Now)); // Event Sourcing avec une liste d'événements (params IEvénementMétier>[])
            var montantRetrait = new Montant(10);
            var dateRetrait = DateTime.Now;
            var evenements = compteBancaire.FaireUnRetrait(montantRetrait, dateRetrait); // retourne un IEnumerable<IEvénémentMétier> contenant l'événement RetraitRealisé

            Check.That(evenements).ContainsExactly(new RetraitRéalisé(_numéroDeCompte, montantRetrait, dateRetrait));
        }
コード例 #6
0
ファイル: PatternsTests.cs プロジェクト: SteinTheo/csKoans
        public void EtantDonnéUnCompteBancaireFaireUnDepotProduitUnEvenement()
        {
            var compteBancaire = new CompteBancaire(new CompteCréé(_numéroDeCompte, 0)); // Event Sourcing avec un seul événement
            var montantDepot = new Montant(10);
            var dateDepot = DateTime.Now;
            var evenements = compteBancaire.FaireUnDepot(montantDepot, dateDepot); // retourne un IEnumerable<IEvenementMetier> contenant l'événement DepotRealisé

            Check.That(evenements).ContainsExactly(new DépotRéalisé(_numéroDeCompte, montantDepot, dateDepot));
        }
コード例 #7
0
ファイル: CompteBancaire.cs プロジェクト: SteinTheo/csKoans
        public IEnumerable<IEvénementMétier> FaireUnRetrait(Montant montantRetrait, DateTime dateRetrait)
        {
            if (montantRetrait.Montant1 > _compteCréé.AutorisationDeCrédit + _dépotRéalisé.MontantDepot.Montant1)
            {
                throw new RetraitNonAutorisé();
            }

            yield return new RetraitRéalisé(_compteCréé.NuméroDeCompte, montantRetrait, dateRetrait);
            if (montantRetrait.Montant1 > _dépotRéalisé.MontantDepot.Montant1)
            {
                yield return new BalanceNégativeDétectée(_compteCréé.NuméroDeCompte, new Montant(montantRetrait.Montant1 - _dépotRéalisé.MontantDepot.Montant1), dateRetrait);
            }
        }
コード例 #8
0
 public void AjouterDébit(Montant montantRetrait)
 {
     _debits += montantRetrait.Montant1;
 }
コード例 #9
0
ファイル: CompteBancaire.cs プロジェクト: SteinTheo/csKoans
 public IEnumerable<IEvénementMétier> FaireUnDepot(Montant montantDepot, DateTime dateDepot)
 {
     yield return new DépotRéalisé(_compteCréé.NuméroDeCompte, montantDepot, dateDepot);
 }
コード例 #10
0
 public BalanceNégativeDétectée(string numéroDeCompte, Montant montant, DateTime dateRetrait)
 {
     _numéroDeCompte = numéroDeCompte;
     _montant = montant;
     _dateRetrait = dateRetrait;
 }