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

import java.util.List;

import org.junit.jupiter.api.Test;

class PlaylistTest {

    private final Song arena = new Song("Arena", "Duna", 185);

    @Test
    void doesNotAcceptTheSameSongTwice() {
        Playlist p = new Playlist();
        assertTrue(p.add(arena));
        assertFalse(p.add(new Song("Arena", "Duna", 185)));
        assertEquals(1, p.size());
    }

    @Test
    void songsViewCannotBeModified() {
        Playlist p = new Playlist();
        p.add(arena);
        List<Song> view = p.songs();
        assertThrows(UnsupportedOperationException.class, () -> view.add(arena));
        assertEquals(1, p.size());
    }

    @Test
    void viewSeesLaterChanges() {
        Playlist p = new Playlist();
        List<Song> view = p.songs();
        p.add(arena);
        assertEquals(List.of(arena), view);
    }
}
