From ec6606f29cef728b78469a28eedf82dab6f4e27d Mon Sep 17 00:00:00 2001 From: Berenice Medel Date: Tue, 11 Jan 2022 15:09:50 -0600 Subject: [PATCH] test delete_expired_songs/2 --- mix.exs | 3 ++- test/live_beats/media_library_test.exs | 30 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 9fb21cb..902a13f 100644 --- a/mix.exs +++ b/mix.exs @@ -52,7 +52,8 @@ defmodule LiveBeats.MixProject do {:mint, "~> 1.0"}, {:heroicons, "~> 0.2.2"}, {:castore, "~> 0.1.13"}, - {:tailwind, "~> 0.1"} + {:tailwind, "~> 0.1"}, + {:timex, "~> 3.0", only: :test} ] end diff --git a/test/live_beats/media_library_test.exs b/test/live_beats/media_library_test.exs index 6c4beaf..56917cf 100644 --- a/test/live_beats/media_library_test.exs +++ b/test/live_beats/media_library_test.exs @@ -53,5 +53,35 @@ defmodule LiveBeats.MediaLibraryTest do song = song_fixture() assert %Ecto.Changeset{} = MediaLibrary.change_song(song) end + + test "delete_expired_songs/2 deletes the song expired before the required interval" do + user = user_fixture() + today = Timex.now() + + three_months_ago = add_n_months(today, -3) + four_months_ago = add_n_months(today, -4) + one_month_ago = add_n_months(today, 1) + + expired_song_1 = + song_fixture(user_id: user.id, title: "song1", inserted_at: four_months_ago) + + expired_song_2 = + song_fixture(user_id: user.id, title: "song2", inserted_at: three_months_ago) + + active_song = song_fixture(user_id: user.id, title: "song3", inserted_at: one_month_ago) + + MediaLibrary.delete_expired_songs(-2, "month") + + assert_raise Ecto.NoResultsError, fn -> MediaLibrary.get_song!(expired_song_1.id) end + assert_raise Ecto.NoResultsError, fn -> MediaLibrary.get_song!(expired_song_2.id) end + assert active_song == MediaLibrary.get_song!(active_song.id) + end + end + + defp add_n_months(datetime, n) do + datetime + |> Timex.shift(months: n) + |> DateTime.to_naive() + |> NaiveDateTime.truncate(:second) end end