package Ġio . project new m . server . features . playlist Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġio . ktor . client . call . body Ċ import Ġio . ktor . client . request . accept Ċ import Ġio . ktor . client . request . bearer Auth Ċ import Ġio . ktor . client . request . delete Ċ import Ġio . ktor . client . request . get Ċ import Ġio . ktor . client . request . patch Ċ import Ġio . ktor . client . request . post Ċ import Ġio . ktor . client . request . put Ċ import Ġio . ktor . client . request . set Body Ċ import Ġio . ktor . http . ContentType Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . http . contentType Ċ import Ġio . project new m . server . Base Application Tests Ċ import Ġio . project new m . server . ext . exists Ċ import Ġio . project new m . server . features . playlist . database . Playlist Entity Ċ import Ġio . project new m . server . features . playlist . database . Playlist Table Ċ import Ġio . project new m . server . features . playlist . database . S ongs In Play lists Table Ċ import Ġio . project new m . server . features . playlist . model . Playlist Ċ import Ġio . project new m . server . features . playlist . model . Playlist Id Body Ċ import Ġio . project new m . server . features . song . database . Song Entity Ċ import Ġio . project new m . server . features . song . database . Song Table Ċ import Ġio . project new m . server . features . song . model . Song Ċ import Ġio . project new m . server . features . song . model . Song Id Body Ċ import Ġio . project new m . server . features . song . test Song 1 Ċ import Ġio . project new m . server . features . song . test S ongs Ċ import Ġio . project new m . server . features . user . database . User Table Ċ import Ġjava . time . LocalDateTime Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . jetbrains . ex posed . dao . id . Entity ID Ċ import Ġorg . jetbrains . ex posed . sql . and Ċ import Ġorg . jetbrains . ex posed . sql . delete All Ċ import Ġorg . jetbrains . ex posed . sql . insert Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠPlaylist Routes Tests Ġ: ĠBase Application Tests () Ġ{ ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠbeforeEach () Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Table . delete All () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong Table . delete All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Post Playlist () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠLocalDateTime . now () ĊĊĠĠĠĠĠĠĠ Ġ// ĠPost ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . post (" v 1 / play lists ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( test Playlist 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Id Ġ= Ġresponse . body < Playlist Id Body >(). playlist Id ĊĊĠĠĠĠĠĠĠ Ġ// ĠRead ĠPlaylist Ġdirectly Ġfrom Ġdatabase Ġ& Ġverify Ġit ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Ġ= Ġtransaction Ġ{ ĠPlaylist Entity [ playlist Id ] Ġ}. to Model () ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . id ). isEqualTo ( playlist Id ) ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . owner Id ). isEqualTo ( test UserId ) ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . createdAt ). is At Least ( startTime ) ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . name ). isEqualTo ( test Playlist 1 . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Playlist () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd ĠPlaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtest Playlist 1 . name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. to Model () ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġit ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . get (" v 1 / play lists /${ playlist . id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠ ĠassertThat ( response . body < Playlist > ()). isEqualTo ( playlist ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Play lists () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd ĠPlay lists Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplay lists Ġ= Ġmutable ListOf < Playlist >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( playlist Ġin Ġtest Play lists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay lists Ġ+= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġplaylist . name !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Model () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġall Ġplay lists Ġ& Ġverify ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . get (" v 1 / play lists ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠ ĠassertThat ( response . body < List < Playlist >> ()). isEqualTo ( play lists ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Patch Playlist () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd ĠPlaylist 1 Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtest Playlist 1 . name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// ĠPatch Ġit Ġwith ĠPlaylist 2 ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . patch (" v 1 / play lists /$ playlist Id ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( test Playlist 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . No Content ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRead ĠPlaylist Ġdirectly Ġfrom Ġdatabase Ġ& Ġverify Ġit ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Ġ= Ġtransaction Ġ{ ĠPlaylist Entity [ playlist Id ] Ġ}. to Model () ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . id ). isEqualTo ( playlist Id ) ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . owner Id ). isEqualTo ( test UserId ) ĊĠĠĠĠĠĠĠ ĠassertThat ( playlist . name ). isEqualTo ( test Playlist 2 . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Delete Playlist () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġplaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtest Playlist 1 . name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// Ġdelete Ġit ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . delete (" v 1 / play lists /$ playlist Id ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . No Content ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġdoesn 't Ġexist Ġin Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġexists Ġ= Ġtransaction Ġ{ ĠPlaylist Entity . exists ( playlist Id ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( exists ). isFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Put Playlist Song () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġplaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtest Playlist 1 . name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd ĠSong Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġsong Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtest Song 1 . title !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġtest Song 1 . genre ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Art Url Ġ= Ġtest Song 1 . cover Art Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġtest Song 1 . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredits Ġ= Ġtest Song 1 . credits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// ĠPut Ġsong Ġinto Ġplaylist ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . put (" v 1 / play lists /$ playlist Id / songs ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( Song Id Body ( song Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . No Content ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġdirectly Ġfrom Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġexists Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS ongs In Play lists Table . exists Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( S ongs In Play lists Table . playlist Id Ġeq Ġplaylist Id ) Ġand Ġ( S ongs In Play lists Table . song Id Ġeq Ġsong Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( exists ). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Delete Playlist Song () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġplaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtest Playlist 1 . name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd ĠSong Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġsong Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSong Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtest Song 1 . title !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġtest Song 1 . genre ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Art Url Ġ= Ġtest Song 1 . cover Art Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġtest Song 1 . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredits Ġ= Ġtest Song 1 . credits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġsong Ġto Ġplaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS ongs In Play lists Table . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . song Id ] Ġ= Ġsong Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . playlist Id ] Ġ= Ġplaylist Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdelete Ġit ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . delete (" v 1 / play lists /$ playlist Id / songs /$ song Id ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . No Content ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġis Ġgone Ġdirectly Ġfrom Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġexists Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS ongs In Play lists Table . exists Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( S ongs In Play lists Table . playlist Id Ġeq Ġplaylist Id ) Ġand Ġ( S ongs In Play lists Table . song Id Ġeq Ġsong Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( exists ). isFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Playlist S ongs () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġplaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Id Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtest Playlist 1 . name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. id . value ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġsongs Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġsongs Ġ= Ġmutable ListOf < Song >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( song Ġin Ġtest S ongs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsongs Ġ+= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSong Entity . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠEntity ID ( test UserId , ĠUser Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġsong . title !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġsong . genre ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Art Url Ġ= Ġsong . cover Art Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġsong . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredits Ġ= Ġsong . credits ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Model () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġsongs Ġto Ġplaylist Ġdirectly Ġinto Ġdatabase ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( song Ġin Ġsongs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ongs In Play lists Table . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . song Id ] Ġ= Ġsong . id !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . playlist Id ] Ġ= Ġplaylist Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġplaylist Ġsongs Ġand Ġverify ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . get (" v 1 / play lists /$ playlist Id / songs ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer Auth ( test User Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( response . status ). isEqualTo ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠ ĠassertThat ( response . body < List < Song >> ()). isEqualTo ( songs ) ĊĠĠĠ Ġ} Ċ } Ċ