aboutsummaryrefslogtreecommitdiff
path: root/tests/integration/wsgi.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/integration/wsgi.py')
-rw-r--r--tests/integration/wsgi.py172
1 files changed, 0 insertions, 172 deletions
diff --git a/tests/integration/wsgi.py b/tests/integration/wsgi.py
deleted file mode 100644
index 8124abe..0000000
--- a/tests/integration/wsgi.py
+++ /dev/null
@@ -1,172 +0,0 @@
-from datetime import datetime, UTC
-from unittest import TestCase
-
-from werkzeug.http import parse_date
-
-from components.database import subscriptions
-from wsgi import app
-
-class TestFlask(TestCase):
- def setUp(self) -> None:
- app.config['TESTING'] = True
- self.client = app.test_client()
- subscriptions.delete_many({})
-
- def test_add_sub(self) -> None:
- # A valid channel - should succeed.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A",
- 'time_between_fetches': 3123,
- })
- self.assertEqual(response.status_code, 201)
- # Duplicate - should return 409.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A",
- 'time_between_fetches': 532,
- })
- self.assertEqual(response.status_code, 409)
- # A madeup channel - should return 400.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/channel/UCBa659QWEk14Tg--mrJ2A",
- 'time_between_fetches': 6824,
- })
- self.assertEqual(response.status_code, 400)
- # Integer strings are accepted for time_between_fetches.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr",
- 'time_between_fetches': "622",
- })
- self.assertEqual(response.status_code, 201)
- # An invalid duration - should return 400.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A",
- 'time_between_fetches': "32.2",
- })
- self.assertEqual(response.status_code, 400)
- # An invalid subscription - should return 400.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/watch?v=WI4U1SVIO3I",
- 'time_between_fetches': 132,
- })
- self.assertEqual(response.status_code, 400)
- # A valid channel - should succeed.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/@MentalOutlaw/videos",
- 'time_between_fetches': 234,
- })
- self.assertEqual(response.status_code, 201)
- # A valid playlist - should succeed.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/watch?v=kYB8IZa5AuE&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab&index=3",
- 'time_between_fetches': 231,
- })
- self.assertEqual(response.status_code, 201)
- # A duplicate despite the structure of the url being different.
- response = self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab",
- 'time_between_fetches': 2380,
- })
- self.assertEqual(response.status_code, 409)
-
- def test_subs_info(self) -> None:
- # Should be empty at start.
- response = self.client.get("/subs-info")
- self.assertEqual(response.status_code, 200)
- response_data = response.get_json()
- self.assertListEqual(response_data, [])
- # Fetching any individual subscription now should fail.
- response = self.client.get("/sub-info/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 404)
- # Fetching the videos of an individual subscription should also fail.
- response = self.client.get("/vid-from-link/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 404)
- # Now add some data to test on...
- self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A",
- 'time_between_fetches': 1,
- })
- self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr",
- 'time_between_fetches': 1,
- })
- # Now should contain 2 subscriptions.
- response = self.client.get("/subs-info")
- self.assertEqual(response.status_code, 200)
- response_data = response.get_json()
- self.assertEqual(len(response_data), 2)
- for sub_info in response_data:
- self.assertEqual(sub_info["videos"], 0)
- # Now fetching an added subscriptions should work.
- response = self.client.get("/sub-info/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 200)
- response_data = response.get_json()
- self.assertEqual(response_data["_id"], "yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- # Same for its videos - though they should still be empty.
- response = self.client.get("/vid-from-link/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 200)
- response_data = response.get_json()
- self.assertListEqual(response_data, [])
- # Subscriptions not added should still not work.
- response = self.client.get("/sub-info/yt:channel:7YOGHUfC1Tb6E4pudI9STA")
- self.assertEqual(response.status_code, 404)
- # Same for for their videos.
- response = self.client.get("/vid-from-link/yt:channel:7YOGHUfC1Tb6E4pudI9STA")
- self.assertEqual(response.status_code, 404)
-
- def test_modify_subs(self) -> None:
- # Confirm all methods do not work before the item exists.
- response = self.client.patch("/set-time-between-fetches/yt:channel:Ba659QWEk1AI4Tg--mrJ2A", data={
- 'time_between_fetches': 313,
- })
- self.assertEqual(response.status_code, 404)
- response = self.client.patch("/set-viewed/yt:channel:Ba659QWEk1AI4Tg--mrJ2A", data={
- 'viewed_time': datetime.now(tz=UTC).isoformat(),
- })
- self.assertEqual(response.status_code, 404)
- response = self.client.delete("/delete-sub/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 404)
- # Now add some data to test on...
- self.client.post("/add-sub/", data={
- 'url': "https://www.youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A",
- 'time_between_fetches': 1,
- })
- # Test set-time-between-fetches.
- response = self.client.patch("/set-time-between-fetches/yt:channel:Ba659QWEk1AI4Tg--mrJ2A", data={
- 'time_between_fetches': 31323,
- })
- self.assertEqual(response.status_code, 200)
- # Should not work if an integer is not provided.
- response = self.client.patch("/set-time-between-fetches/yt:channel:Ba659QWEk1AI4Tg--mrJ2A", data={
- 'time_between_fetches': 31.3,
- })
- self.assertEqual(response.status_code, 400)
- # Test set-viewed.
- update_time_to = datetime.now(tz=UTC)
- response = self.client.patch("/set-viewed/yt:channel:Ba659QWEk1AI4Tg--mrJ2A", data={
- 'viewed_time': update_time_to.isoformat(),
- })
- self.assertEqual(response.status_code, 200)
- response_data = response.get_json()
- self.assertEqual(update_time_to.replace(microsecond=0), parse_date(response_data["last_viewed"]))
- # Should not work with an invalid datetime string.
- response = self.client.patch("/set-viewed/yt:channel:Ba659QWEk1AI4Tg--mrJ2A", data={
- 'viewed_time': "Monday 11th of February 2023",
- })
- self.assertEqual(response.status_code, 400)
- # Should work fine without a viewed_time set though...
- time_before_updating = datetime.now(tz=UTC)
- response = self.client.patch("/set-viewed/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 200)
- response_data = response.get_json()
- last_viewed = parse_date(response_data["last_viewed"])
- assert last_viewed
- self.assertLessEqual(time_before_updating.replace(microsecond=0), last_viewed)
- # Delete the subscription.
- response = self.client.delete("/delete-sub/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 200)
- # Make sure the item no longer exists.
- response = self.client.get("/sub-info/yt:channel:Ba659QWEk1AI4Tg--mrJ2A")
- self.assertEqual(response.status_code, 404)
-
- def tearDown(self) -> None:
- subscriptions.delete_many({})