Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/exofinal std21092 #210

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/main/java/school/hei/patrimoine/possession/Argent.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,14 @@ public Argent projectionFuture(Instant tFutur) {
}

private int financementsFutur(Instant tFutur) {
throw new NotImplemented();
}
int totalFinancements = 0;
for (TrainDeVie trainDeVie : financés) {
totalFinancements += trainDeVie.calculerDepenses(tFutur);
}
return totalFinancements;
}



void addFinancés(TrainDeVie trainDeVie) {
financés.add(trainDeVie);
Expand Down
15 changes: 13 additions & 2 deletions src/main/java/school/hei/patrimoine/possession/Materiel.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import school.hei.patrimoine.NotImplemented;

import java.time.Duration;
import java.time.Instant;

public final class Materiel extends Possession {
Expand All @@ -13,7 +14,17 @@ public Materiel(String nom, Instant t, int valeurComptable, double tauxDApprecia
}

@Override
public Possession projectionFuture(Instant tFutur) {
throw new NotImplemented();
public Materiel projectionFuture(Instant dateFuture) {
long joursEntre = Duration.between(getT(), dateFuture).toDays();
double anneesEntre = joursEntre / 365.0;

double valeurProjete = getValeurComptable() * Math.pow(1 + tauxDAppreciationAnnuelle, anneesEntre);

return new Materiel(
getNom(),
dateFuture,
(int) valeurProjete,
tauxDAppreciationAnnuelle
);
}
}
25 changes: 24 additions & 1 deletion src/main/java/school/hei/patrimoine/possession/TrainDeVie.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import school.hei.patrimoine.NotImplemented;

import java.time.Duration;
import java.time.Instant;

public final class TrainDeVie extends Possession {
Expand Down Expand Up @@ -30,6 +31,28 @@ public TrainDeVie(

@Override
public TrainDeVie projectionFuture(Instant tFutur) {
throw new NotImplemented();

int futureExpenses = calculerDepenses(tFutur);


return new TrainDeVie(
getNom(),
depensesMensuelle,
debut,
fin.isBefore(tFutur) ? fin : tFutur,
financePar,
dateDePonction
);
}
public int calculerDepenses(Instant tFutur) {

Instant endDate = fin.isBefore(tFutur) ? fin : tFutur;
if (endDate.isBefore(debut)) {
return 0;
}

long daysBetween = Duration.between(debut, endDate).toDays();
int monthsBetween = (int) (daysBetween / 30);
return monthsBetween * depensesMensuelle;
}
}
21 changes: 21 additions & 0 deletions src/test/java/school/hei/patrimoine/possession/MaterielTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.junit.jupiter.api.Test;

import java.time.Duration;
import java.time.Instant;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

class MaterielTest {
Expand All @@ -21,4 +23,23 @@ void mon_mac_s_apprecie_negativement_dans_le_futur() {
assertTrue(
mac.getValeurComptable() > mac.valeurComptableFuture(au26juin24));
}
@Test
void verification_valeur_projete_negativement() {
var au26Oct21 = Instant.parse("2021-10-26T00:00:00.00Z");
var mac = new Materiel(
"MacBook Pro",
au26Oct21,
2_000_000,
-0.10);

var au26juin24 = Instant.parse("2024-06-26T00:00:00.00Z");
var macFutur = mac.projectionFuture(au26juin24);

long joursEntre = Duration.between(au26Oct21, au26juin24).toDays();
double anneesEntre = joursEntre / 365.0;

double expectedValue = 2_000_000 * Math.pow(1 - 0.10, anneesEntre);

assertEquals((int) expectedValue, macFutur.getValeurComptable(), 1);
}
}
21 changes: 19 additions & 2 deletions src/test/java/school/hei/patrimoine/possession/TrainDeVieTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import java.time.Instant;
import java.util.Set;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

class TrainDeVieTest {
@Test
void train_de_vie_est_finance_par_compte_courant() {
Expand All @@ -21,13 +24,27 @@ void train_de_vie_est_finance_par_compte_courant() {
compteCourant,
1);
//TODO: assert something useful
var au26juin24 = Instant.parse("2024-06-26T00:00:00.00Z");
int expectedDepenses = vieEstudiantine.calculerDepenses(au26juin24);


TrainDeVie vieEstudiantineFutur = vieEstudiantine.projectionFuture(au26juin24);
assertEquals(expectedDepenses, vieEstudiantineFutur.calculerDepenses(au26juin24));

assertTrue(compteCourant.getValeurComptable() >= 0);
}

@Test
void un_train_de_vie_financé_par_argent() {
void un_train_de_vie_finance_par_argent() {
var au13mai24 = Instant.parse("2024-05-13T00:00:00.00Z");
var financeur = new Argent("Espèces", au13mai24, 400_000);

var trainDeVie = new TrainDeVie(null, 0, null, null, financeur, 0);
var trainDeVie = new TrainDeVie("Test TrainDeVie", 10_000, au13mai24, au13mai24.plusSeconds(86400 * 30), financeur, 1);

var au13juin24 = Instant.parse("2024-06-13T00:00:00.00Z");
int expectedDepenses = trainDeVie.calculerDepenses(au13juin24);

TrainDeVie trainDeVieFutur = trainDeVie.projectionFuture(au13juin24);
assertEquals(expectedDepenses, trainDeVieFutur.calculerDepenses(au13juin24));
}
}