Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,17 @@ public class InMemoryConferencesRepository implements ConferencesRepository {

private Importer importer;
private List<Conference> conferences;
private List<Year> years;
private static final List<Year> YEARS = initYears();

@Inject
InMemoryConferencesRepository(Importer importer) {
this.importer = importer;
conferences = List.empty();
initYears();
importAllConferences();
}

@Override
public void add(Rate rate) {
public void add(Rate rate){
log.info("Rate added: " + rate.toString());
Presentation presentation = conferences
.flatMap(Conference::getPresentations)
Expand All @@ -37,7 +36,7 @@ public void add(Rate rate) {
}

@Override
public void add(Comment comment) {
public void add(Comment comment){
log.info("Comment added: " + comment.toString());
conferences
.flatMap(Conference::getPresentations)
Expand All @@ -46,31 +45,31 @@ public void add(Comment comment) {

}

private void add(String year, Conference conf) {
private void add(String year, Conference conf){
log.info("Conference added: " + conf.toString());
conferences = conferences.append(conf);
years.filter(y -> y.getYear().equals(year))
YEARS.filter(y -> y.getYear().equals(year))
.map(y -> y.addConference(conf));
}

@Override
public java.util.List<Conference> getConferences() {
public java.util.List<Conference> getConferences(){
return conferences.toJavaList();
}

@Override
public java.util.List<YearDto> getYears() {
return years.toJavaStream().map(YearDto::new).collect(Collectors.toList());
public java.util.List<YearDto> getYears(){
return YEARS.toJavaStream().map(YearDto::new).collect(Collectors.toList());
}

@Override
public ConferenceDto getConference(String id) {
public ConferenceDto getConference(String id){
//TODO what to return whe conference not found?
return new ConferenceDto(conferences.find(conf -> conf.getId().equals(id)).get());
}

@Override
public void importAllConferences() {
public void importAllConferences(){
add("2017", new Conference("11", "DevConf", importer.importDevConf2017().map(Presentation::new)));
add("2019", new Conference("12", "DevConf", importer.importDevConf2019().map(Presentation::new)));
add("2018", new Conference("21", "Boiling Frogs", importer.importBoilingFrogs2018().map(Presentation::new)));
Expand All @@ -80,12 +79,12 @@ public void importAllConferences() {
add("2019", new Conference("51", "Confitura", importer.importConfitura2019().map(Presentation::new)));
}

private void initYears() {
years = List.of(new Year("2019"), new Year("2018"), new Year("2017"));
private static List<Year> initYears(){
return List.of(new Year("2019"), new Year("2018"), new Year("2017"));
}

@Override
public String importConference(ConferenceImportDto conf) {
public String importConference(ConferenceImportDto conf){
String id = UUID.randomUUID().toString();
Conference conference = new Conference(id, conf.getName(), importer.importFromYouTubePlaylist(conf.getPlaylistId()).map(
Presentation::new));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public Importer() {
}


public javaslang.collection.List<VideoData> importFromYouTubePlaylist(String playlistId) {
public javaslang.collection.List<VideoData> importFromYouTubePlaylist(String playlistId){
javaslang.collection.List<VideoData> videos = javaslang.collection.List.empty();
try {
// This object is used to make YouTube Data API requests. The last
Expand Down Expand Up @@ -85,31 +85,31 @@ public javaslang.collection.List<VideoData> importFromYouTubePlaylist(String pla

}

public javaslang.collection.List<VideoData> importConfitura2019() {
public javaslang.collection.List<VideoData> importConfitura2019(){
return importFromYouTubePlaylist("PLVbNBx5Phg3AwVti8rYNqx7965pgfMZWO");
}

public javaslang.collection.List<VideoData> importConfitura2018() {
public javaslang.collection.List<VideoData> importConfitura2018(){
return importFromYouTubePlaylist("PLVbNBx5Phg3DkJO00oMB2ETHFmG7RUujm");
}

public javaslang.collection.List<VideoData> importBoilingFrogs2019() {
public javaslang.collection.List<VideoData> importBoilingFrogs2019(){
return importFromYouTubePlaylist("PLVT0blg4rCWCUv3oEMQ12haQkMQ1drefo");
}

public javaslang.collection.List<VideoData> importBoilingFrogs2018() {
public javaslang.collection.List<VideoData> importBoilingFrogs2018(){
return importFromYouTubePlaylist("PLVT0blg4rCWCEPTY20ZrZeGNQUD_2khrE");
}

public javaslang.collection.List<VideoData> importScalar2019() {
public javaslang.collection.List<VideoData> importScalar2019(){
return importFromYouTubePlaylist("PL8NC5lCgGs6MYG0hR_ZOhQLvtoyThURka");
}

public javaslang.collection.List<VideoData> importDevConf2019() {
public javaslang.collection.List<VideoData> importDevConf2019(){
return importFromYouTubePlaylist("PL8BUDiR2Y8Ys3DHzQhws4BZng8DjvEwib");
}

public javaslang.collection.List<VideoData> importDevConf2017() {
public javaslang.collection.List<VideoData> importDevConf2017(){
return importFromYouTubePlaylist("PL8BUDiR2Y8Yu3SFzqhRWqDrF9OdejbeV0");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package com.github.peggybrown.speechrank;

import com.github.peggybrown.speechrank.dto.ConferenceImportDto;
import com.github.peggybrown.speechrank.entity.Comment;
import com.github.peggybrown.speechrank.entity.Conference;
import com.github.peggybrown.speechrank.entity.Presentation;
import com.github.peggybrown.speechrank.entity.Rate;
import com.github.peggybrown.speechrank.gateway.Importer;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;

public class InMemoryConferencesRepositoryTest {
private InMemoryConferencesRepository conferencesRepository;
private Importer importerMock;

@Before
public void setUp() {
importerMock = mock(Importer.class);
when(importerMock.importDevConf2017()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importDevConf2019()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importBoilingFrogs2018()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importBoilingFrogs2019()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importScalar2019()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importConfitura2018()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importConfitura2019()).thenReturn(javaslang.collection.List.empty());
when(importerMock.importFromYouTubePlaylist(any())).thenReturn(javaslang.collection.List.empty());
conferencesRepository = new InMemoryConferencesRepository(importerMock);
}

@Test
public void importAllConferencesShouldAddAnyConference() {
//when:
conferencesRepository.importAllConferences();
List<Conference> conferences = conferencesRepository.getConferences();

//then:
assertThat(conferences)
.isNotNull()
.isNotEmpty();
}

private ConferenceImportDto prepareConference() {
String conferenceName = "conference name";
ConferenceImportDto conference = new ConferenceImportDto();
conference.setYear("1990");
conference.setName(conferenceName);
conference.setPlaylistId("https://www.test.com");
return conference;
}

@Test
public void addAndGetConference() {
//given:
ConferenceImportDto conference = prepareConference();

//when:
conferencesRepository.importConference(conference);
List<Conference> conferences = conferencesRepository.getConferences();

//then:
assertThat(conferences)
.isNotNull()
.extracting(Conference::getName)
.contains(conference.getName());
}

@Test
public void addRateToPresentationTest() {
//given:
Importer.VideoData videoData = new Importer.VideoData("videoId", "videoTitle", "videoDescription");
ConferenceImportDto conference = prepareConference();
when(importerMock.importFromYouTubePlaylist(conference.getPlaylistId()))
.thenReturn(javaslang.collection.List.of(videoData));
conferencesRepository = new InMemoryConferencesRepository(importerMock);
conferencesRepository.importConference(conference);
Presentation presentation = getPresentation(conference.getName(), videoData.getTitle());
Rate rate = prepareRate(presentation);

//when:
conferencesRepository.add(rate);
Presentation downloadedPresentation = getPresentation(conference.getName(), videoData.getTitle());

//then:
assertThat(downloadedPresentation.getRates())
.isNotNull()
.contains(rate);
}

private Rate prepareRate(Presentation presentation) {
Rate rate = new Rate();
rate.setUserId("user id");
rate.setRate(4);
rate.setPresentationId(presentation.getId());
return rate;
}

@Test
public void addCommentToPresentationTest() {
//given:
Importer.VideoData videoData = new Importer.VideoData("videoId", "videoTitle", "videoDescription");
ConferenceImportDto conference = prepareConference();
when(importerMock.importFromYouTubePlaylist(conference.getPlaylistId()))
.thenReturn(javaslang.collection.List.of(videoData));
conferencesRepository = new InMemoryConferencesRepository(importerMock);
conferencesRepository.importConference(conference);
Presentation presentation = getPresentation(conference.getName(), videoData.getTitle());
Comment comment = prepareComment(presentation);

//when:
conferencesRepository.add(comment);
Presentation downloadedPresentation = getPresentation(conference.getName(), videoData.getTitle());

//then:
assertThat(downloadedPresentation.getComments())
.extracting(Comment::getComment)
.contains(comment.getComment());
}

private Comment prepareComment(Presentation presentation) {
Comment comment = new Comment();
comment.setComment("comment content");
comment.setPresentationId(presentation.getId());
comment.setUserId("user id");
comment.setUsername("user name");
return comment;
}

private Presentation getPresentation(String conferenceName, String videoDataTitle) {
return conferencesRepository.getConferences()
.stream()
.filter(conf -> conferenceName.equals(conf.getName()))
.map(Conference::getPresentations)
.flatMap(javaslang.collection.List::toJavaStream)
.filter(prez -> videoDataTitle.equals(prez.getTitle()))
.findAny()
.get();
}
}