snaag / TIL

https://github.com/snaag/todo3/issues
3 stars 0 forks source link

22-11-26-SAT #15

Open snaag opened 1 year ago

snaag commented 1 year ago
snaag commented 1 year ago

디렉토리 구조

스크린샷 2022-11-27 오전 12 51 50 스크린샷 2022-11-27 오후 5 28 57
snaag commented 1 year ago

코드

1. Controller

2. Domain

Article

public class Article {
    private String name;
    private String title;
    private String context;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContext() {
        return context;
    }

    public void setContext(String context) {
        this.context = context;
    }
}

3. Repository

MemoryArticleRepository (Class)

public class MemoryArticleRepository implements ArticleRepository {
    private static Map<Long, Article> store = new HashMap<>();
    private static Long sequence = 0L;

    @Override
    public Long create(Article article) {
        updateSequence();
        store.put(sequence, article);
        return sequence;
    }

    public void updateSequence() {
        sequence++;
    }

    @Override
    public Map<Long, Article> loadAll() {
        return store;
    }

    @Override
    public Optional<Article> loadOne(Long id) {
        // https://mangkyu.tistory.com/70
//        Optional<Article> optional = Optional.ofNullable(store.get(id));
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Long updateOne(Long id, Article article) {
        store.put(id, article);
        return id;
    }

    @Override
    public void deleteAll() {
        store.clear();
    }

    @Override
    public void deleteOne(Long id) {
        store.remove(id);
    }
}

4. Test

MemoryArticleRepositoryTest

class MemoryArticleRepositoryTest {
    public MemoryArticleRepository memoryArticleRepository = new MemoryArticleRepository();

    @AfterEach
    void afterEach() {
        memoryArticleRepository.deleteAll();
    }

    @Test
    void create() {
        // given 이러한 상황이 주어져서
        Article articleCreate1 = new Article();
        articleCreate1.setName("sang-a");
        articleCreate1.setTitle("spring");
        articleCreate1.setContext("demo 만들어보기");

        Article articleCreate2 = new Article();
        articleCreate2.setName("LEaps");
        articleCreate2.setTitle("C#");
        articleCreate2.setContext("unity 로 게임 만들어보기");

        // when 이걸 실행했을때
        Long id = memoryArticleRepository.create(articleCreate1);
        Article articleGet = memoryArticleRepository.loadOne(id).get();

        // then 이런 결과가 나와야함
        assertThat(articleCreate2).isNotEqualTo(articleGet);
        assertThat(articleCreate1).isEqualTo(articleGet);
    }

    @Test
    void loadAll() {
        // given 이러한 상황이 주어져서
        Article articleCreate1 = new Article();
        articleCreate1.setName("sang-a");
        articleCreate1.setTitle("spring");
        articleCreate1.setContext("demo 만들어보기");

        Article articleCreate2 = new Article();
        articleCreate2.setName("LEaps");
        articleCreate2.setTitle("C#");
        articleCreate2.setContext("unity 로 게임 만들어보기");

        memoryArticleRepository.create(articleCreate1);
        memoryArticleRepository.create(articleCreate2);

        // when 이걸 실행했을때
        Map<Long, Article> loadStore = memoryArticleRepository.loadAll();
        Integer size = loadStore.size();

        // then 이런 결과가 나와야함
        assertThat(size).isEqualTo(2);
        assertThat(size).isNotEqualTo(3);
    }

    @Test
    void loadOne() {
        // given 이러한 상황이 주어져서
        Article articleCreate1 = new Article();
        articleCreate1.setName("sang-a");
        articleCreate1.setTitle("spring");
        articleCreate1.setContext("demo 만들어보기");

        Article articleCreate2 = new Article();
        articleCreate2.setName("LEaps");
        articleCreate2.setTitle("C#");
        articleCreate2.setContext("unity 로 게임 만들어보기");

        memoryArticleRepository.create(articleCreate1);
        memoryArticleRepository.create(articleCreate2);

        // when 이걸 실행했을때
        Article articleGet1 = memoryArticleRepository.loadOne(1L).get();
        Article articleGet2 = memoryArticleRepository.loadOne(2L).get();

        // then 이런 결과가 나와야함
        assertThat(articleCreate1).isEqualTo(articleGet1);
        assertThat(articleCreate2).isEqualTo(articleGet2);
        assertThat(articleCreate1).isNotEqualTo(articleGet2);
    }

    @Test
    void updateOne() {
        // given 이러한 상황이 주어져서
        Article article = new Article();
        article.setName("sang-a");
        article.setTitle("spring");
        article.setContext("demo 만들어보기");

        Long id = memoryArticleRepository.create(article);

        // when 이걸 실행했을때
        Article articleUpdate = new Article();
        articleUpdate.setName("sang-a (수정됨)");
        articleUpdate.setTitle("spring (수정됨)");
        articleUpdate.setContext("demo 만들어보기 (수정됨)");

        Long updateId = memoryArticleRepository.updateOne(id, articleUpdate);

        // then 이런 결과가 나와야함
        assertThat(id).isEqualTo(updateId);
        assertThat(memoryArticleRepository.loadOne(id).get().getName())
            .isEqualTo("sang-a (수정됨)");
    }

    @Test
    void deleteAll() {
        // given 이러한 상황이 주어져서
        Article articleCreate1 = new Article();
        articleCreate1.setName("sang-a");
        articleCreate1.setTitle("spring");
        articleCreate1.setContext("demo 만들어보기");

        Article articleCreate2 = new Article();
        articleCreate2.setName("LEaps");
        articleCreate2.setTitle("C#");
        articleCreate2.setContext("unity 로 게임 만들어보기");

        memoryArticleRepository.create(articleCreate1);
        memoryArticleRepository.create(articleCreate2);

        // when 이걸 실행했을때
        memoryArticleRepository.deleteAll();

        // then 이런 결과가 나와야함
        Map<Long, Article> store = memoryArticleRepository.loadAll();
        assertThat(store.size()).isEqualTo(0);
    }

    @Test
    void deleteOne() {
        // given 이러한 상황이 주어져서
        Article articleCreate1 = new Article();
        articleCreate1.setName("sang-a");
        articleCreate1.setTitle("spring");
        articleCreate1.setContext("demo 만들어보기");

        Article articleCreate2 = new Article();
        articleCreate2.setName("LEaps");
        articleCreate2.setTitle("C#");
        articleCreate2.setContext("unity 로 게임 만들어보기");

        Long id1 = memoryArticleRepository.create(articleCreate1);
        memoryArticleRepository.create(articleCreate2);

        // when 이걸 실행했을때
        memoryArticleRepository.deleteOne(id1);

        // then 이런 결과가 나와야함
        assertThat(memoryArticleRepository.loadAll().size())
            .isEqualTo(1);
    }
}