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
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
42 changes: 26 additions & 16 deletions src/main/java/ru/netology/manager/AfishaManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,48 @@
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import ru.netology.domain.MovieItem;
import ru.netology.repository.MovieRepository;

@NoArgsConstructor
@AllArgsConstructor
public class AfishaManager {
private MovieItem[] movies = new MovieItem[0];
private int moviesToReturn = 10;
private MovieRepository repository;
private int moviesToReturnDefault = 10;
private int moviesToReturn;

public AfishaManager(int moviesToReturn) {

public AfishaManager(MovieRepository repository, int moviesToReturn) {
this.repository = repository;
this.moviesToReturn = moviesToReturn;
}

public void add(MovieItem movieItem) {

MovieItem[] tmp = new MovieItem[movies.length + 1];

System.arraycopy(movies, 0, tmp, 0, movies.length);

tmp[tmp.length - 1] = movieItem;
public AfishaManager(MovieRepository repository) {
this.repository = repository;
}

movies = tmp;
public void add(MovieItem movieItem) {
repository.save(movieItem);
}

public MovieItem[] getMovies() {
int arrayLength = moviesToReturn;
if (movies.length < arrayLength) {
arrayLength = movies.length;
MovieItem[] moviesFromRepo = repository.findAll();
int arrayLength = moviesFromRepo.length;

if (moviesToReturn <= 0) {
if (moviesToReturnDefault < moviesFromRepo.length) {
arrayLength = moviesToReturnDefault;
}
} else {
if (arrayLength < moviesFromRepo.length) {
arrayLength = moviesToReturn;

}
}
MovieItem[] result = new MovieItem[arrayLength];

for (int i = 0; i < arrayLength; i++) {
int index = movies.length - i - 1;
result[i] = movies[index];
int index = moviesFromRepo.length - i - 1;
result[i] = moviesFromRepo[index];
}

return result;
Expand Down
46 changes: 46 additions & 0 deletions src/main/java/ru/netology/repository/MovieRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package ru.netology.repository;

import ru.netology.domain.MovieItem;

public class MovieRepository {
private MovieItem[] movies = new MovieItem[0];

public void save(MovieItem movieItem) {

MovieItem[] tmp = new MovieItem[movies.length + 1];

System.arraycopy(movies, 0, tmp, 0, movies.length);
tmp[tmp.length - 1] = movieItem;
movies = tmp;
}

public MovieItem[] findAll() {
return movies;
}

public MovieItem findById(int id) {
for (MovieItem movieItem : movies) {
if (movieItem.getId() == id) {
return movieItem;
}
}
return null;
}

public void removeById(int id) {
MovieItem[] tmp = new MovieItem[movies.length - 1];
int i = 0;
for (MovieItem movieItem : movies) {
if (movieItem.getId() != id) {
tmp[i] = movieItem;
i++;
}
}
movies = tmp;
}

public void removeAll() {
movies = new MovieItem[0];
}

}
98 changes: 77 additions & 21 deletions src/test/java/ru/netology/manager/AfishaManagerTest.java
Original file line number Diff line number Diff line change
@@ -1,37 +1,72 @@
package ru.netology.manager;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import ru.netology.domain.MovieItem;
import ru.netology.repository.MovieRepository;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;

@ExtendWith(MockitoExtension.class)
class AfishaManagerTest {
AfishaManager manager = new AfishaManager();
MovieItem first = new MovieItem(1, 1, "Бладшот", "боевик", "http://image.com");
MovieItem second = new MovieItem(2, 2, "Вперёд", "мультфильм", "http://image.com");
MovieItem third = new MovieItem(3, 3, "Отель 'Белград'", "комедия", "http://image.com");
MovieItem fourth = new MovieItem(4, 4, "Джентльмены", "боевик", "http://image.com");
MovieItem fifth = new MovieItem(5, 5, "Человек-невидимка", "ужасы", "http://image.com");
MovieItem sixth = new MovieItem(6, 6, "Тролли. Мировой тур", "мультфильм", "http://image.com");
MovieItem seventh = new MovieItem(7, 7, "Номер один", "комедия", "http://image.com");
MovieItem eighth = new MovieItem(8, 8, "Оно", "ужасы", "http://image.com");
MovieItem ninth = new MovieItem(9, 9, "Соник в кино", "приключения", "http://image.com");
MovieItem tenth = new MovieItem(10, 10, "Дюна", "научная фантастика", "http://image.com");
MovieItem eleventh = new MovieItem(11, 11, "Лёд", "спорт", "http://image.com");
@Mock
MovieRepository repository;

@InjectMocks
private AfishaManager manager;
private MovieItem first = new MovieItem(1, 1, "Бладшот", "боевик", "http://image.com");
private MovieItem second = new MovieItem(2, 2, "Вперёд", "мультфильм", "http://image.com");
private MovieItem third = new MovieItem(3, 3, "Отель 'Белград'", "комедия", "http://image.com");
private MovieItem fourth = new MovieItem(4, 4, "Джентльмены", "боевик", "http://image.com");
private MovieItem fifth = new MovieItem(5, 5, "Человек-невидимка", "ужасы", "http://image.com");
private MovieItem sixth = new MovieItem(6, 6, "Тролли. Мировой тур", "мультфильм", "http://image.com");
private MovieItem seventh = new MovieItem(7, 7, "Номер один", "комедия", "http://image.com");
private MovieItem eighth = new MovieItem(8, 8, "Оно", "ужасы", "http://image.com");
private MovieItem ninth = new MovieItem(9, 9, "Соник в кино", "приключения", "http://image.com");
private MovieItem tenth = new MovieItem(10, 10, "Дюна", "научная фантастика", "http://image.com");
private MovieItem eleventh = new MovieItem(11, 11, "Лёд", "спорт", "http://image.com");

@Test
void shouldAdd() {
MovieItem[] expected = new MovieItem[] {first};
doReturn(new MovieItem[]{first}).when(repository).findAll();
doNothing().when(repository).save(first);

manager.add(first);
MovieItem[] expected = new MovieItem[]{first};

manager.add(first);

assertArrayEquals(expected, manager.getMovies());
}

@Test
void shouldReturnAllMoviesForDefault() {
MovieItem[] expected = new MovieItem[] {tenth,ninth,eighth,seventh,sixth,fifth,fourth, third,second,first};
doReturn(new MovieItem[]{first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh}).when(repository).findAll();

MovieItem[] expected = new MovieItem[]{eleventh, tenth, ninth, eighth, seventh, sixth, fifth, fourth, third, second};

assertArrayEquals(expected, manager.getMovies());
}

@Test
void shouldReturnMoviesWithMoviesToReturned() {
MovieItem[] moviesToReturn = {first, second, third, fourth, fifth};
doReturn(moviesToReturn).when(repository).findAll();
MovieItem[] expected = new MovieItem[]{fifth, fourth, third, second, first};

assertArrayEquals(expected, manager.getMovies());
}

@Test
void shouldReturnDefaultIfLessZero() {
manager = new AfishaManager(repository, -4);
MovieItem[] moviesToReturn = {first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth};
doReturn(moviesToReturn).when(repository).findAll();

manager.add(first);
manager.add(second);
manager.add(third);
Expand All @@ -43,23 +78,44 @@ void shouldReturnAllMoviesForDefault() {
manager.add(ninth);
manager.add(tenth);

MovieItem[] expected = new MovieItem[]{tenth, ninth, eighth, seventh, sixth, fifth, fourth, third, second, first};

assertArrayEquals(expected, manager.getMovies());
}

@Test
void shouldReturnMoviesWithMoviesToReturned() {
AfishaManager manager = new AfishaManager(5);
MovieItem[] expected = new MovieItem[] {fifth,fourth,third,second,first};
void shouldReturnEmptyArrayIfAddMoviesAndMoviesToReturnZero() {
manager.add(first);
manager.add(second);
manager.add(third);
manager.add(fourth);
manager.add(fifth);
AfishaManager manager = new AfishaManager(repository, 0);
MovieItem[] moviesToReturn = {};
doReturn(moviesToReturn).when(repository).findAll();
MovieItem[] expected = new MovieItem[0];

assertArrayEquals(expected, manager.getMovies());
}

@Test
void shouldEmptyArrayMovies() {
assertArrayEquals(new MovieItem[0], manager.getMovies());
MovieItem[] moviesToReturn = {};
doReturn(moviesToReturn).when(repository).findAll();
MovieItem[] expected = new MovieItem[0];
assertArrayEquals(expected, manager.getMovies());
}

@Test
void shouldReturnLastFourIfMoviesToReturnSix() {
AfishaManager manager = new AfishaManager(repository, 6);
manager.add(first);
manager.add(second);
manager.add(third);
manager.add(fourth);
MovieItem[] moviesToReturn = {first, second, third, fourth};
doReturn(moviesToReturn).when(repository).findAll();
MovieItem[] expected = new MovieItem[]{fourth, third, second, first};

assertArrayEquals(expected, manager.getMovies());
}

}
123 changes: 123 additions & 0 deletions src/test/java/ru/netology/repository/MovieRepositoryTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package ru.netology.repository;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import ru.netology.domain.MovieItem;
import ru.netology.manager.AfishaManager;

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

class MovieRepositoryTest {
private MovieRepository repository = new MovieRepository();
private MovieItem first = new MovieItem(1, 1, "Бладшот", "боевик", "http://image.com");
private MovieItem second = new MovieItem(2, 2, "Вперёд", "мультфильм", "http://image.com");
private MovieItem third = new MovieItem(3, 3, "Отель 'Белград'", "комедия", "http://image.com");
private MovieItem fourth = new MovieItem(4, 4, "Джентльмены", "боевик", "http://image.com");
private MovieItem fifth = new MovieItem(5, 5, "Человек-невидимка", "ужасы", "http://image.com");
private MovieItem sixth = new MovieItem(6, 6, "Тролли. Мировой тур", "мультфильм", "http://image.com");
private MovieItem seventh = new MovieItem(7, 7, "Номер один", "комедия", "http://image.com");
private MovieItem eighth = new MovieItem(8, 8, "Оно", "ужасы", "http://image.com");
private MovieItem ninth = new MovieItem(9, 9, "Соник в кино", "приключения", "http://image.com");
private MovieItem tenth = new MovieItem(10, 10, "Дюна", "научная фантастика", "http://image.com");
private MovieItem eleventh = new MovieItem(11, 11, "Лёд", "спорт", "http://image.com");


@Test
void shouldSave() {
MovieItem[] expected = new MovieItem[]{first};

repository.save(first);

assertArrayEquals(expected, repository.findAll());
}

@Test
void shouldSaveAllMovies() {
MovieItem[] expected = new MovieItem[]{first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh};

repository.save(first);
repository.save(second);
repository.save(third);
repository.save(fourth);
repository.save(fifth);
repository.save(sixth);
repository.save(seventh);
repository.save(eighth);
repository.save(ninth);
repository.save(tenth);
repository.save(eleventh);

assertArrayEquals(expected, repository.findAll());
}

@Test
void shouldFindById() {
MovieItem expected = new MovieItem(7, 7, "Номер один", "комедия", "http://image.com");

repository.save(first);
repository.save(second);
repository.save(third);
repository.save(fourth);
repository.save(fifth);
repository.save(sixth);
repository.save(seventh);
repository.save(eighth);
repository.save(ninth);
repository.save(tenth);
repository.save(eleventh);

MovieItem actual = repository.findById(7);

assertEquals(expected, actual);
}

@Test
void shouldReturnNullIfNotFindById() {
MovieItem expected = repository.findById(14);

assertNull(expected);
}

@Test
void shouldRemoveById() {
MovieItem[] expected = new MovieItem[]{first, second, third, fourth, fifth, seventh, eighth, ninth, tenth, eleventh};

repository.save(first);
repository.save(second);
repository.save(third);
repository.save(fourth);
repository.save(fifth);
repository.save(sixth);
repository.save(seventh);
repository.save(eighth);
repository.save(ninth);
repository.save(tenth);
repository.save(eleventh);

repository.removeById(6);


assertArrayEquals(expected, repository.findAll());
}

@Test
void shouldRemoveAll() {
repository.removeAll();

MovieItem[] expected = new MovieItem[0];

assertArrayEquals(expected, repository.findAll());
}

@Test
void shouldNotRemoveIfNotExistingId() {
repository.save(first);
repository.save(second);
repository.save(third);
repository.save(fourth);
repository.save(fifth);

assertThrows(ArrayIndexOutOfBoundsException.class, () -> repository.removeById(8));
}

}