Fix tests not using full ISO-8601

This commit is contained in:
JonOfUs 2024-12-01 18:46:46 +01:00 committed by Jonathan Flueren
parent d552205369
commit 35c0e3dcd5
2 changed files with 160 additions and 134 deletions

View File

@ -20,117 +20,128 @@ use tests\Helper\DatabaseTransaction;
*/ */
class EpisodeActionControllerTest extends TestCase class EpisodeActionControllerTest extends TestCase
{ {
use DatabaseTransaction;
use DatabaseTransaction; const TEST_GUID = "test_guid_123q45345";
private IAppContainer $container;
const TEST_GUID = "test_guid_123q45345"; public function setUp(): void
private IAppContainer $container; {
parent::setUp();
$app = new App("gpoddersync");
$this->container = $app->getContainer();
$this->db = \OC::$server->getDatabaseConnection();
}
public function setUp(): void { /**
parent::setUp(); * @before
$app = new App('gpoddersync'); */
$this->container = $app->getContainer(); public function before()
$this->db = \OC::$server->getDatabaseConnection(); {
} $this->startTransaction();
}
/** public function testEpisodeActionListAction()
* @before {
*/ $userId = uniqid("test_user");
public function before() $episodeActionController = new EpisodeActionController(
{ "gpoddersync",
$this->startTransaction(); $this->createMock(IRequest::class),
} $userId,
$this->container->get(EpisodeActionRepository::class),
$this->container->get(EpisodeActionSaver::class)
);
/** @var EpisodeActionWriter $episodeActionWriter */
$episodeActionWriter = $this->container->get(
EpisodeActionWriter::class
);
public function testEpisodeActionListAction() $mark = 1633520363;
{ $episodeActionEntity = new EpisodeActionEntity();
$userId = uniqid("test_user"); $expectedPodcast = uniqid("test");
$episodeActionController = new EpisodeActionController( $episodeActionEntity->setPodcast($expectedPodcast);
"gpoddersync", $expectedEpisode = uniqid("test");
$this->createMock(IRequest::class), $episodeActionEntity->setEpisode($expectedEpisode);
$userId, $episodeActionEntity->setAction("PLAY");
$this->container->get(EpisodeActionRepository::class), $episodeActionEntity->setPosition(5);
$this->container->get(EpisodeActionSaver::class) $episodeActionEntity->setStarted(0);
); $episodeActionEntity->setTotal(123);
$episodeActionEntity->setTimestampEpoch($mark + 600);
$episodeActionEntity->setUserId($userId);
$episodeActionEntity->setGuid(self::TEST_GUID);
$episodeActionWriter->save($episodeActionEntity);
/** @var EpisodeActionWriter $episodeActionWriter */ $response = $episodeActionController->list($mark);
$episodeActionWriter = $this->container->get(EpisodeActionWriter::class); self::assertCount(1, $response->getData()["actions"]);
$mark = 1633520363; $episodeActionInResponse = $response->getData()["actions"][0];
$episodeActionEntity = new EpisodeActionEntity(); self::assertSame(
$expectedPodcast = uniqid("test"); "2021-10-06T11:49:23+00:00",
$episodeActionEntity->setPodcast($expectedPodcast); $episodeActionInResponse["timestamp"]
$expectedEpisode = uniqid("test"); );
$episodeActionEntity->setEpisode($expectedEpisode); self::assertSame($expectedEpisode, $episodeActionInResponse["episode"]);
$episodeActionEntity->setAction("PLAY"); self::assertSame($expectedPodcast, $episodeActionInResponse["podcast"]);
$episodeActionEntity->setPosition(5); self::assertSame(self::TEST_GUID, $episodeActionInResponse["guid"]);
$episodeActionEntity->setStarted(0); self::assertSame(5, $episodeActionInResponse["position"]);
$episodeActionEntity->setTotal(123); self::assertSame(0, $episodeActionInResponse["started"]);
$episodeActionEntity->setTimestampEpoch($mark+600); self::assertSame(123, $episodeActionInResponse["total"]);
$episodeActionEntity->setUserId($userId); self::assertSame("PLAY", $episodeActionInResponse["action"]);
$episodeActionEntity->setGuid(self::TEST_GUID); }
$episodeActionWriter->save($episodeActionEntity);
$response = $episodeActionController->list($mark); public function testEpisodeActionListWithoutSinceAction()
self::assertCount(1, $response->getData()['actions']); {
$userId = uniqid("test_user");
$episodeActionController = new EpisodeActionController(
"gpoddersync",
$this->createMock(IRequest::class),
$userId,
$this->container->get(EpisodeActionRepository::class),
$this->container->get(EpisodeActionSaver::class)
);
$episodeActionInResponse = $response->getData()['actions'][0]; /** @var EpisodeActionWriter $episodeActionWriter */
self::assertSame("2021-10-06T11:49:23", $episodeActionInResponse['timestamp']); $episodeActionWriter = $this->container->get(
self::assertSame($expectedEpisode, $episodeActionInResponse['episode']); EpisodeActionWriter::class
self::assertSame($expectedPodcast, $episodeActionInResponse['podcast']); );
self::assertSame(self::TEST_GUID, $episodeActionInResponse['guid']);
self::assertSame(5, $episodeActionInResponse['position']);
self::assertSame(0, $episodeActionInResponse['started']);
self::assertSame(123, $episodeActionInResponse['total']);
self::assertSame("PLAY", $episodeActionInResponse['action']);
}
public function testEpisodeActionListWithoutSinceAction() $episodeActionEntity = new EpisodeActionEntity();
{ $expectedPodcast = uniqid("test");
$userId = uniqid("test_user"); $episodeActionEntity->setPodcast($expectedPodcast);
$episodeActionController = new EpisodeActionController( $expectedEpisode = uniqid("test");
"gpoddersync", $episodeActionEntity->setEpisode($expectedEpisode);
$this->createMock(IRequest::class), $episodeActionEntity->setAction("PLAY");
$userId, $episodeActionEntity->setPosition(5);
$this->container->get(EpisodeActionRepository::class), $episodeActionEntity->setStarted(0);
$this->container->get(EpisodeActionSaver::class) $episodeActionEntity->setTotal(123);
); $episodeActionEntity->setTimestampEpoch(1633520363);
$episodeActionEntity->setUserId($userId);
$episodeActionEntity->setGuid(self::TEST_GUID);
$episodeActionWriter->save($episodeActionEntity);
/** @var EpisodeActionWriter $episodeActionWriter */ $response = $episodeActionController->list();
$episodeActionWriter = $this->container->get(EpisodeActionWriter::class); self::assertCount(1, $response->getData()["actions"]);
$episodeActionEntity = new EpisodeActionEntity(); $episodeActionInResponse = $response->getData()["actions"][0];
$expectedPodcast = uniqid("test"); self::assertSame(
$episodeActionEntity->setPodcast($expectedPodcast); "2021-10-06T11:39:23+00:00",
$expectedEpisode = uniqid("test"); $episodeActionInResponse["timestamp"]
$episodeActionEntity->setEpisode($expectedEpisode); );
$episodeActionEntity->setAction("PLAY"); self::assertSame($expectedEpisode, $episodeActionInResponse["episode"]);
$episodeActionEntity->setPosition(5); self::assertSame($expectedPodcast, $episodeActionInResponse["podcast"]);
$episodeActionEntity->setStarted(0); self::assertSame(self::TEST_GUID, $episodeActionInResponse["guid"]);
$episodeActionEntity->setTotal(123); self::assertSame(5, $episodeActionInResponse["position"]);
$episodeActionEntity->setTimestampEpoch(1633520363); self::assertSame(0, $episodeActionInResponse["started"]);
$episodeActionEntity->setUserId($userId); self::assertSame(123, $episodeActionInResponse["total"]);
$episodeActionEntity->setGuid(self::TEST_GUID); self::assertSame("PLAY", $episodeActionInResponse["action"]);
$episodeActionWriter->save($episodeActionEntity); }
$response = $episodeActionController->list(); public function testEpisodeActionCreateAction(): void
self::assertCount(1, $response->getData()['actions']); {
$time = time();
$episodeActionInResponse = $response->getData()['actions'][0]; $userId = uniqid("test_user", true);
self::assertSame("2021-10-06T11:39:23", $episodeActionInResponse['timestamp']); $payload = json_decode(
self::assertSame($expectedEpisode, $episodeActionInResponse['episode']); '[
self::assertSame($expectedPodcast, $episodeActionInResponse['podcast']);
self::assertSame(self::TEST_GUID, $episodeActionInResponse['guid']);
self::assertSame(5, $episodeActionInResponse['position']);
self::assertSame(0, $episodeActionInResponse['started']);
self::assertSame(123, $episodeActionInResponse['total']);
self::assertSame("PLAY", $episodeActionInResponse['action']);
}
public function testEpisodeActionCreateAction(): void {
$time = time();
$userId = uniqid('test_user', true);
$payload = json_decode('[
{ {
"podcast": "https://example.com/feed.rss", "podcast": "https://example.com/feed.rss",
"episode": "https://example.com/files/s01e20.mp3", "episode": "https://example.com/files/s01e20.mp3",
@ -141,40 +152,55 @@ class EpisodeActionControllerTest extends TestCase
"position": 120, "position": 120,
"total": 500 "total": 500
} }
]', true, 512, JSON_THROW_ON_ERROR); ]',
$request = $this->createMock(IRequest::class); true,
$request->expects($this->once()) 512,
->method('getParams') JSON_THROW_ON_ERROR
->will($this->returnValue($payload)); );
$episodeActionController = new EpisodeActionController( $request = $this->createMock(IRequest::class);
"gpoddersync", $request
$request, ->expects($this->once())
$userId, ->method("getParams")
$this->container->get(EpisodeActionRepository::class), ->will($this->returnValue($payload));
$this->container->get(EpisodeActionSaver::class) $episodeActionController = new EpisodeActionController(
); "gpoddersync",
$response = $episodeActionController->create(); $request,
$userId,
$this->container->get(EpisodeActionRepository::class),
$this->container->get(EpisodeActionSaver::class)
);
$response = $episodeActionController->create();
$this->assertArrayHasKey('timestamp', $response->getData()); $this->assertArrayHasKey("timestamp", $response->getData());
$this->assertGreaterThanOrEqual($time, $response->getData()['timestamp']); $this->assertGreaterThanOrEqual(
/** @var EpisodeActionMapper $mapper */ $time,
$mapper = $this->container->query(EpisodeActionMapper::class); $response->getData()["timestamp"]
$episodeActionEntities = $mapper->findAll(0, $userId); );
/** @var EpisodeActionEntity $firstEntity */ /** @var EpisodeActionMapper $mapper */
$firstEntity = $episodeActionEntities[0]; $mapper = $this->container->query(EpisodeActionMapper::class);
$this->assertSame("https://example.com/feed.rss", $firstEntity->getPodcast()); $episodeActionEntities = $mapper->findAll(0, $userId);
$this->assertSame("https://example.com/files/s01e20.mp3", $firstEntity->getEpisode()); /** @var EpisodeActionEntity $firstEntity */
$this->assertSame("s01e20-example-org", $firstEntity->getGuid()); $firstEntity = $episodeActionEntities[0];
$this->assertSame("PLAY", $firstEntity->getAction()); $this->assertSame(
$this->assertSame(120, $firstEntity->getPosition()); "https://example.com/feed.rss",
$this->assertSame(15, $firstEntity->getStarted()); $firstEntity->getPodcast()
$this->assertSame(1260608400, $firstEntity->getTimestampEpoch()); );
} $this->assertSame(
"https://example.com/files/s01e20.mp3",
$firstEntity->getEpisode()
);
$this->assertSame("s01e20-example-org", $firstEntity->getGuid());
$this->assertSame("PLAY", $firstEntity->getAction());
$this->assertSame(120, $firstEntity->getPosition());
$this->assertSame(15, $firstEntity->getStarted());
$this->assertSame(1260608400, $firstEntity->getTimestampEpoch());
}
/** /**
* @after * @after
*/ */
public function after(): void { public function after(): void
$this->rollbackTransaction(); {
} $this->rollbackTransaction();
}
} }

View File

@ -28,7 +28,7 @@ class EpisodeActionRepositoryTest extends \Test\TestCase
$episodeUrl = uniqid("test_https://dts.podtrac.com/"); $episodeUrl = uniqid("test_https://dts.podtrac.com/");
$timestampHumanReadable = "2021-08-22T23:58:56"; $timestampHumanReadable = "2021-08-22T23:58:56+00:00";
$guid = uniqid("test_gid://art19-episode-locator/V0/Ktd"); $guid = uniqid("test_gid://art19-episode-locator/V0/Ktd");
$savedEpisodeActionEntity = $episodeActionSaver->saveEpisodeActions( $savedEpisodeActionEntity = $episodeActionSaver->saveEpisodeActions(
@ -58,7 +58,7 @@ class EpisodeActionRepositoryTest extends \Test\TestCase
(string) $savedEpisodeActionEntity->getTimestampEpoch() (string) $savedEpisodeActionEntity->getTimestampEpoch()
) )
->setTimezone(new \DateTimeZone("UTC")) ->setTimezone(new \DateTimeZone("UTC"))
->format("Y-m-d\TH:i:s"); ->format("c");
self::assertSame($timestampHumanReadable, $timestampOutputFormatted); self::assertSame($timestampHumanReadable, $timestampOutputFormatted);
/** @var $episodeActionRepository EpisodeActionRepository */ /** @var $episodeActionRepository EpisodeActionRepository */
@ -71,7 +71,7 @@ class EpisodeActionRepositoryTest extends \Test\TestCase
self::USER_ID_0 self::USER_ID_0
); );
self::assertSame( self::assertSame(
"2021-08-22T23:58:56", "2021-08-22T23:58:56+00:00",
$retrievedEpisodeActionEntity->getTimestamp() $retrievedEpisodeActionEntity->getTimestamp()
); );
} }