Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Тюттерин_Яков_Z1411_Lab4

.pdf
Скачиваний:
1
Добавлен:
07.01.2025
Размер:
495.77 Кб
Скачать

package ru.guap.investor.writer.impl;

import ru.guap.investor.model.Bond; import ru.guap.investor.model.FileType;

import ru.guap.investor.model.InvestorPortfolio; import ru.guap.investor.model.Stock;

import ru.guap.investor.writer.FileWriter;

import java.io.BufferedWriter; import java.io.File;

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List;

public class FileWriterTxt implements FileWriter {

public static final String DELIMETER = ";";

@Override

public FileType getType() { return FileType.TXT;

}

@Override

public void write(InvestorPortfolio investorPortfolio) { String path = investorPortfolio.getPath();

try (BufferedWriter writer = new BufferedWriter(new java.io.FileWriter(path, false))) {

List<String> lines = parseToString(investorPortfolio); for (String line : lines) {

writer.write(line);

writer.newLine();

}

} catch (IOException e) {

throw new RuntimeException(e);

}

}

private static List<String> parseToString(InvestorPortfolio investorPortfolio) { List<String> result = new ArrayList<>();

result.add("type" + DELIMETER + "company" + DELIMETER + "cost"); for (Bond bond : investorPortfolio.getBonds()) {

String temp = bond.getClass().getSimpleName() + DELIMETER + bond.getCompany() + DELIMETER +

bond.getCost();

result.add(temp);

}

result.add("");

result.add("type" + DELIMETER + "company" + DELIMETER + "cost"); for (Stock stock : investorPortfolio.getStocks()) {

String temp = stock.getClass().getSimpleName() + DELIMETER + stock.getCompany() + DELIMETER +

stock.getCost();

result.add(temp);

}

return result;

}

}

package ru.guap.investor.writer;

import ru.guap.investor.model.FileType;

import ru.guap.investor.model.InvestorPortfolio;

public interface FileWriter { FileType getType();

void write(InvestorPortfolio investorPortfolio);

}

Структура пакетов:

Тесты:

package ru.guap.investor.model;

import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import ru.guap.investor.model.Bond;

import ru.guap.investor.model.InvestorPortfolio; import ru.guap.investor.model.Pair;

import ru.guap.investor.model.Stock;

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

public class InvestorPortfolioTest {

private InvestorPortfolio investorPortfolio;

@BeforeEach

public void init() {

this.investorPortfolio = new InvestorPortfolio(null, null);

}

@Test

public void checkSumBounds() { for (int i = 0; i < 5; i++) {

investorPortfolio.addBound(new Bond("SBER", 100.5));

}

Pair pair = investorPortfolio.sumBonds(); assertEquals(502.5, pair.getSum()); assertEquals(5, pair.getCount());

}

@Test

public void checkSumStocks() { for (int i = 0; i < 5; i++) {

investorPortfolio.addStock(new Stock("SBER", 100.5));

}

Pair pair = investorPortfolio.sumStocks(); assertEquals(502.5, pair.getSum()); assertEquals(5, pair.getCount());

}

}

package ru.guap.investor.service;

import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; import ru.guap.investor.model.*;

import ru.guap.investor.reader.impl.FileReaderTxt; import ru.guap.investor.util.WithountBeforeEach; import ru.guap.investor.writer.impl.FileWriterTxt;

import java.io.IOException; import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional;

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

public class InvestorServiceTest {

private InvestorService investorService;

private static final String PATH = "resource/test_portfolio.txt";

@BeforeEach

public void init(final TestInfo info) { Optional<Method> testMethod = info.getTestMethod(); if (testMethod.isPresent()) {

if (testMethod.get().isAnnotationPresent(WithountBeforeEach.class)) { return;

}

}

investorService = new InvestorService(PATH, FileType.TXT);

}

@Test

public void checkSumAfterRecovery() { for (int i = 0; i < 6; i++) {

investorService.addBound(new Bond("SBER", 100.5));

}

for (int i = 0; i < 4; i++) { investorService.addStock(new Stock("SBER", 100.5));

}

Pair pair = investorService.getSum(Currency.RUBLES); assertEquals(1005.0, pair.getSum()); assertEquals(10, pair.getCount());

Pair sumStocks = investorService.getSumStocks(Currency.RUBLES); assertEquals(402.0, sumStocks.getSum());

assertEquals(4, sumStocks.getCount());

Pair pairDollar = investorService.getSum(Currency.DOLLAR); assertEquals(11.2, pairDollar.getSum());

Pair sumBonds = investorService.getSumBonds(Currency.RUBLES); assertEquals(603.0, sumBonds.getSum());

assertEquals(6, sumBonds.getCount());

}

@Test

@WithountBeforeEach

public void checkEqualsAfterRecovery() {

InvestorPortfolio investorPortfolio = new InvestorPortfolio(FileType.TXT, PATH); for (int i = 0; i < 6; i++) {

investorPortfolio.addBound(new Bond("SBER", 100.5));

}

for (int i = 0; i < 4; i++) { investorPortfolio.addStock(new Stock("SBER", 100.5));

}

new FileWriterTxt().write(investorPortfolio); assertEquals(investorPortfolio, new FileReaderTxt().read(PATH));

}

@AfterEach

public void destroy() throws IOException { Files.deleteIfExists(Path.of(PATH));

}

}

package ru.guap.investor.util;

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME) public @interface WithountBeforeEach {

}

package ru.guap.investor.writer;

import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import ru.guap.investor.model.Bond; import ru.guap.investor.model.FileType;

import ru.guap.investor.model.InvestorPortfolio; import ru.guap.investor.model.Stock;

import ru.guap.investor.reader.impl.FileReaderJson; import ru.guap.investor.writer.impl.FileWriterJson;

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path;

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

public class FileWriterJsonTest {

private InvestorPortfolio investorPortfolio;

private static final String PATH = "resource/test_portfolio.json";

@BeforeEach

public void init() {

investorPortfolio = new InvestorPortfolio(FileType.JSON, PATH);

}

@Test

public void checkEqualsAfterRecovery() { for (int i = 0; i < 6; i++) {

investorPortfolio.addBound(new Bond("SBER", 100.5));

}

for (int i = 0; i < 4; i++) { investorPortfolio.addStock(new Stock("SBER", 100.5));

}

new FileWriterJson().write(investorPortfolio); assertEquals(investorPortfolio, new FileReaderJson().read(PATH));

}

@AfterEach

public void destroy() throws IOException { Files.deleteIfExists(Path.of(PATH));

}

}

Результат выполнения тестов: