v1
5/30/2022 by bergi -00
Setup HTML - click to add setup HTML
disable setup JavaScript
Setup JavaScript
const shuffleArray = array => {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    const temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
}

const totalShows = 26;
const seasonsPerShow = 20;
const episodesPerSeason = 40;
const totalWatchedShows = totalShows * seasonsPerShow * episodesPerSeason + 1;
let seasonOffset = 1;
let showIdOffset = 0;
let episodeNumber = 1;

const watchedShows = [];

for (let i = 1; i < totalWatchedShows; i++) {
    watchedShows.push({
        id: i,
        season: seasonOffset,
        episode: episodeNumber,
        showId: i - showIdOffset,
    });

    showIdOffset =
        i !== 0 && i % (seasonsPerShow * episodesPerSeason) === 0
            ? showIdOffset
            : showIdOffset + 1;
    seasonOffset =
        i !== 0 && i % episodesPerSeason === 0
            ? seasonOffset + 1
            : seasonOffset;

    episodeNumber++;
    episodeNumber = episodeNumber === episodesPerSeason + 1 ? 1 : episodeNumber;

    if (seasonOffset === seasonsPerShow + 1) {
        seasonOffset = 1;
    }
}

shuffleArray(watchedShows)


function getShows() {
	const shows = [];
	
	for (let i = 0; i < totalShows; i++) {
	    const seasons = [];
    	const episodes = [];
	    for (let k = 0; k < episodesPerSeason; k++) {
	        episodes.push({
	            episode: k + 1,
	   	    });
    	}

	    for (let j = 0; j < seasonsPerShow; j++) {
    	    seasons.push({ season_number: j + 1, episodes });
	    }

	    shows.push({ id: i + 1, seasons });
	}
	
	shuffleArray(shows)
	return shows;
}
delete caserun single casemove downdrag and drop case


ready



const shows = getShows();
const newShowObject = {};

for (const show of shows) {
    newShowObject[show.id] = { ...show };
}

for (const show of watchedShows) {
    for (const season of newShowObject[show.showId].seasons) {
        if (season.season_number !== show.season) {
            continue;
        }
        season.episodes = season.episodes.filter(
            (episode) => episode.episode !== show.episode
        );
    }

    newShowObject[show.showId].seasons = newShowObject[show.showId].seasons.filter(
        (season) => season.episodes.length > 0
    );
}

const unwatchedShows = [...Object.values(newShowObject)].filter(
    (show) => show.seasons.length > 0
);
delete caserun single casemove upmove downdrag and drop case


ready



const shows = getShows();
const newShowObject = {};

for (const show of shows) {
    newShowObject[show.id] = { ...show };
    const newSeasons = {};

    for (const seasons of show.seasons) {
        newSeasons[seasons.season_number] = { ...seasons };

        const newEpisodes = {};

        for (const episodes of seasons.episodes) {
            newEpisodes[episodes.episode] = { ...episodes };
        }

        newSeasons[seasons.season_number].episodes = { ...newEpisodes };
    }
    newShowObject[show.id].seasons = { ...newSeasons };
}

for (const show of watchedShows) {
    delete newShowObject[show.showId].seasons[show.season].episodes[show.episode];
}

let unwatchedShows = [...Object.values(newShowObject)];

for (const show of unwatchedShows) {
    show.seasons = [...Object.values(show.seasons)];
    for (const season of show.seasons) {
        season.episodes = [...Object.values(season.episodes)];
    }
    show.seasons = show.seasons.filter((season) => season.episodes.length > 0);
}

unwatchedShows = unwatchedShows.filter((show) => show.seasons.length > 0);
delete caserun single casemove updrag and drop case


ready



const shows = getShows();
const newShowArray = [];

for (const show of shows) {
    const seasons = [];
    for (const season of show.seasons) {
        const episodes = [];
        for (const episode of season.episodes) {
            const isEpisodeWatched = watchedShows.some((watchedShow) => {
                return (
                    show.id === watchedShow.showId &&
                    season.season_number === watchedShow.season &&
                    episode.episode === watchedShow.episode
                );
            });
            !isEpisodeWatched && episodes.push(episode);
        }
        episodes.length > 0 && seasons.push({ ...season, episodes });
    }
    seasons.length > 0 && newShowArray.push({ ...show, seasons });
}
Test Case - click to add another test case
Teardown JS - click to add teardown JavaScript
Output (DOM) - click to monitor output (DOM) while test is running
RUN