From e98745abac072ce63095d6729401f34a5c386d58 Mon Sep 17 00:00:00 2001 From: Martin Albert Date: Mon, 17 Jun 2024 13:53:04 +0200 Subject: [PATCH] fix: review fixes --- butter_cms/tests/test_author.py | 12 +++--------- butter_cms/tests/test_category.py | 12 +++--------- butter_cms/tests/test_content_field.py | 12 +++--------- butter_cms/tests/test_feed.py | 7 ++----- butter_cms/tests/test_page.py | 17 ++++------------- butter_cms/tests/test_post.py | 17 ++++------------- butter_cms/tests/test_tag.py | 12 +++--------- butter_cms/tests/test_vcr_config.py | 26 +++++++++++++++++++++++++- 8 files changed, 47 insertions(+), 68 deletions(-) diff --git a/butter_cms/tests/test_author.py b/butter_cms/tests/test_author.py index e8abbb2..19edf0d 100644 --- a/butter_cms/tests/test_author.py +++ b/butter_cms/tests/test_author.py @@ -2,14 +2,11 @@ import os from butter_cms.author import Author from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestListAuthor(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestListAuthor(TestCaseWithAPIKey): @vcr.use_cassette('authors/test_author_all_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -127,10 +124,7 @@ def test_all_include_recent_posts(self): } ) -class TestRetrieveAuthor(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestRetrieveAuthor(TestCaseWithAPIKey): @vcr.use_cassette('authors/test_author_get_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_category.py b/butter_cms/tests/test_category.py index 102614d..b06d96f 100644 --- a/butter_cms/tests/test_category.py +++ b/butter_cms/tests/test_category.py @@ -2,14 +2,11 @@ import os from butter_cms.category import Category from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestListCategory(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestListCategory(TestCaseWithAPIKey): @vcr.use_cassette('categories/test_category_all_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -107,10 +104,7 @@ def test_all_include_recent_posts(self): } ) -class TestRetrieveCategory(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestRetrieveCategory(TestCaseWithAPIKey): @vcr.use_cassette('categories/test_category_get_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_content_field.py b/butter_cms/tests/test_content_field.py index fddad99..ae4b63c 100644 --- a/butter_cms/tests/test_content_field.py +++ b/butter_cms/tests/test_content_field.py @@ -2,14 +2,11 @@ import os from butter_cms.content_field import ContentField from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestListContentField(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestListContentField(TestCaseWithAPIKey): @vcr.use_cassette('content_fields/test_content_field_all_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -100,10 +97,7 @@ def test_list_non_existent_content_field(self): self.assertIn('detail', response) self.assertEqual('Content key non-existent-key not found', response['detail']) -class TestRetrieveContentField(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestRetrieveContentField(TestCaseWithAPIKey): @vcr.use_cassette('content_fields/test_content_field_get_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_feed.py b/butter_cms/tests/test_feed.py index 01db9f3..607aee3 100644 --- a/butter_cms/tests/test_feed.py +++ b/butter_cms/tests/test_feed.py @@ -2,14 +2,11 @@ import os from butter_cms.feed import Feed from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestFeed(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestFeed(TestCaseWithAPIKey): @vcr.use_cassette('feeds/test_feed_sitemap_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_page.py b/butter_cms/tests/test_page.py index 8656f2c..d52d329 100644 --- a/butter_cms/tests/test_page.py +++ b/butter_cms/tests/test_page.py @@ -2,14 +2,11 @@ import os from butter_cms.page import Page from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestListPages(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestListPages(TestCaseWithAPIKey): @vcr.use_cassette('pages/test_page_all_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -177,10 +174,7 @@ def test_list_pages_without_page_type(self): } ) -class TestRetrievePage(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestRetrievePage(TestCaseWithAPIKey): @vcr.use_cassette('pages/test_page_get_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -316,10 +310,7 @@ def test_get_non_existent_page(self): self.assertIn('detail', response) self.assertEqual('Not found', response['detail']) -class TestSearchPage(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestSearchPage(TestCaseWithAPIKey): @vcr.use_cassette('pages/test_page_search_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_post.py b/butter_cms/tests/test_post.py index 12b4878..0855782 100644 --- a/butter_cms/tests/test_post.py +++ b/butter_cms/tests/test_post.py @@ -2,14 +2,11 @@ import os from butter_cms.post import Post from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestListPosts(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestListPosts(TestCaseWithAPIKey): @vcr.use_cassette('posts/test_post_all_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -133,10 +130,7 @@ def test_list_posts_without_body(self): } ) -class TestRetrievePost(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestRetrievePost(TestCaseWithAPIKey): @vcr.use_cassette('posts/test_post_get_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -210,10 +204,7 @@ def test_get_non_existent_post(self): self.assertIn('detail', response) self.assertEqual('Not found', response['detail']) -class TestSearchPost(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestSearchPost(TestCaseWithAPIKey): @vcr.use_cassette('posts/test_post_search_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_tag.py b/butter_cms/tests/test_tag.py index df8bc0e..0e512b5 100644 --- a/butter_cms/tests/test_tag.py +++ b/butter_cms/tests/test_tag.py @@ -2,14 +2,11 @@ import os from butter_cms.tag import Tag from requests.exceptions import HTTPError -from test_vcr_config import vcr_setup +from test_vcr_config import TestCaseWithAPIKey, vcr_setup vcr = vcr_setup() -class TestListTags(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestListTags(TestCaseWithAPIKey): @vcr.use_cassette('tags/test_tag_all_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): @@ -106,10 +103,7 @@ def test_list_tags_with_recent_posts(self): } ) -class TestRetrieveTag(unittest.TestCase): - def setUp(self): - self.token = os.getenv('DEMO_TOKEN') - +class TestRetrieveTag(TestCaseWithAPIKey): @vcr.use_cassette('tags/test_tag_get_invalid_token.json') def test_invalid_token(self): with self.assertRaises(HTTPError): diff --git a/butter_cms/tests/test_vcr_config.py b/butter_cms/tests/test_vcr_config.py index 107da26..6fa0b0f 100644 --- a/butter_cms/tests/test_vcr_config.py +++ b/butter_cms/tests/test_vcr_config.py @@ -1,4 +1,9 @@ +import os import socket +import unittest + +# Block network access +# Comment out the following code block if you want to run the tests with real network access def guard(*args, **kwargs): raise Exception("Blocked network access. Use VCR cassettes instead.") socket.socket = guard @@ -39,4 +44,23 @@ def vcr_setup(): decode_compressed_response=True, before_record_response=response_filter(), serializer='json', - ) \ No newline at end of file + ) + +class TestCaseWithAPIKey(unittest.TestCase): + """Unit Test Case with API key + This class is used to test the ButterCMS API with VCR + + The VCR library is used to record the API response and replay it in the future. + There are multiple modes like 'once', 'new_episodes', 'none' and 'all'. + More information about each of them can be found here: https://vcrpy.readthedocs.io/en/latest/usage.html#record-modes + + For VCR recordings or cassetes to work, at least 'once' the test should be run with real network access. + This is to record the API response and save it in the cassette for future unit tests. + + To re-record the API response - tying the API key to the cassette. + You can use record_mode='new_episodes' to record the API responses again. + You can also delete the cassette file to re-record the missing API response with default mode 'once'. + """ + + def setUp(self): + self.token = os.getenv('DEMO_TOKEN') \ No newline at end of file