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

import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;

import org.junit.jupiter.api.Test;

class ComparatorsTest {

    private static List<String> titles(List<Song> songs) {
        List<String> result = new ArrayList<>();
        for (Song s : songs) {
            result.add(s.title());
        }
        return result;
    }

    @Test
    void byDurationSortsShortestFirstAndKeepsTiesInOrder() {
        List<Song> songs = Songs.sample();
        songs.sort(new ByDuration());
        // Malecón y Cumbre duran 190: el orden es estable, quedan como estaban.
        assertEquals(List.of("Arena", "Malecón", "Cumbre", "Brisa", "Garúa", "Puente de piedra"),
                titles(songs));
    }

    @Test
    void byArtistThenTitleBreaksTiesByTitle() {
        List<Song> songs = Songs.sample();
        songs.sort(new ByArtistThenTitle());
        assertEquals(List.of("Garúa", "Malecón", "Arena", "Brisa", "Cumbre", "Puente de piedra"),
                titles(songs));
    }

    @Test
    void treeSetWithByDurationDropsSongsWithTheSameDuration() {
        TreeSet<Song> set = new TreeSet<>(new ByDuration());
        set.addAll(Songs.sample());
        assertEquals(5, set.size());
    }
}
