class SocialCenterPageTestCase(TestCase): """Test Case 5: Social Center Must Retrieve Pages """ TEST_SITE = "test" TEST_PAGED_SITE = "test_paged" @classmethod def setUpClass(self): self.test_bot = TestBot() self.test_paged_bot = TestBotWithPages() self.social_center = SocialCenter() self.social_center.add_site(self.TEST_SITE, self.test_bot) self.social_center.add_site(self.TEST_PAGED_SITE, self.test_paged_bot) self.social_center.authenticate(self.TEST_SITE, "test_main_token", "test_sub_token") self.social_center.authenticate(self.TEST_PAGED_SITE, "test_main_token", "test_sub_token") @classmethod def tearDownClass(self): self.social_center.logout(self.TEST_SITE) self.social_center.logout(self.TEST_PAGED_SITE) self.social_center.remove_site(self.TEST_SITE) self.social_center.remove_site(self.TEST_PAGED_SITE) del self.social_center del self.test_bot del self.test_paged_bot def test_case(self): self.only_paged_site_has_pages() self.can_get_pages() def only_paged_site_has_pages(self): self.assertFalse(self.social_center.must_select_page(self.TEST_SITE)) self.assertTrue(self.social_center.must_select_page(self.TEST_PAGED_SITE)) self.assertRaises(NotImplementedError, self.social_center.get_pages, self.TEST_SITE, "any_token") # Should not raise any errors: pages = self.social_center.get_pages(self.TEST_PAGED_SITE, self.test_paged_bot._valid_main_token) def can_get_pages(self): self.social_center.authenticate(self.TEST_PAGED_SITE, "test_main_token", "test_sub_token") invalid_pages = self.social_center.get_pages(self.TEST_PAGED_SITE, "invalid_request_token") self.assertFalse(invalid_pages) valid_pages = self.social_center.get_pages(self.TEST_PAGED_SITE, self.test_paged_bot._valid_main_token) self.assertTrue(valid_pages) self.assertEqual(len(valid_pages), 10) for i in range(10): page = valid_pages[i] self.assertEqual(page["id"], str(i+1)) self.assertEqual(page["name"], "Page " + str(i+1))
class RequestTestCase(TestCase): """Test Case 9: Social Center Views Must Render """ TEST_SITE = "test" TEST_PAGED_SITE = "test_paged" @staticmethod def generate_user_with_permissions(): admin_group = Group.objects.create(name="CMSAdmin") user = User.objects.create_user(username='******') user.groups.add(admin_group) # user.user_permissions.add(Permission.objects.get(codename="add_socialtoken")) # user.user_permissions.add(Permission.objects.get(codename="change_socialtoken")) # user.user_permissions.add(Permission.objects.get(codename="delete_socialtoken")) # user = User.objects.get(pk=user.pk) return user @staticmethod def generate_get_request(user): get_request = HttpRequest() get_request.method = "GET" get_request.session = {} get_request.user = user get_request.META["SERVER_NAME"] = "testapp.com" get_request.META["SERVER_PORT"] = "12345" return get_request @classmethod def setUpClass(self): self.user = self.generate_user_with_permissions() self.test_bot = TestBot() self.test_paged_bot = TestBotWithPages() self.social_center = SocialCenter() self.default_site_info = self.social_center.get_sites() self.social_center.add_site(self.TEST_SITE, self.test_bot) self.social_center.add_site(self.TEST_PAGED_SITE, self.test_paged_bot) @classmethod def tearDownClass(self): self.user.delete() self.social_center.logout(self.TEST_SITE) self.social_center.logout(self.TEST_PAGED_SITE) self.social_center.remove_site(self.TEST_SITE) self.social_center.remove_site(self.TEST_PAGED_SITE) del self.social_center del self.test_bot del self.test_paged_bot def test_social_view_has_correct_elements(self): sites = self.social_center.get_sites() for site_id, site in sites.items(): site["auth_uri"] = "/social/%s/auth" % site_id expected_html = render_to_string("socialnetwork-main.html", { "sites" : sites }) request = self.generate_get_request(self.user) request.method = "POST" invalid_response = sn_views.social(request) request.method = "GET" valid_response = sn_views.social(request) self.assertNotEqual(invalid_response.content.decode(), expected_html) self.assertEqual(valid_response.content.decode(), expected_html) # Test view changes after one site has been authenticated self.social_center.authenticate(self.TEST_SITE, "main_token", "sub_token") updated_sites = self.social_center.get_sites() for site_id, site in updated_sites.items(): site["auth_uri"] = "/social/%s/auth" % site_id updated_sites[self.TEST_SITE]["logout_uri"] = "/social/%s/logout" % self.TEST_SITE request.method = "GET" updated_valid_response = sn_views.social(request) updated_expected_html = render_to_string("socialnetwork-main.html", { "sites" : updated_sites }) self.social_center.logout(self.TEST_SITE) self.assertEqual(updated_valid_response.content.decode(), updated_expected_html) def test_social_test_view_has_correct_elements(self): expected_html = render_to_string("socialnetwork-post-test.html", { "social_post_uri" : "/social/post" }) request = self.generate_get_request(self.user) request.method = "POST" invalid_response = sn_views.social_test(request) request.method = "GET" valid_response = sn_views.social_test(request) self.assertNotEqual(invalid_response.content.decode(), expected_html) self.assertEqual(valid_response.content.decode(), expected_html) def test_social_auth_view_has_correct_elements(self): get_request = self.generate_get_request(self.user) not_found_response = sn_views.social_auth(get_request, "non_existant_site") self.assertEqual(not_found_response.status_code, 404) self.social_center.authenticate(self.TEST_SITE, "main_token", "sub_token") already_logged_in_response = sn_views.social_auth(get_request, self.TEST_SITE) self.assertEqual(already_logged_in_response.status_code, 302) self.assertEqual(already_logged_in_response.url, "/social/") self.social_center.logout(self.TEST_SITE) test_auth_data_key = "%s_auth_data" % self.TEST_SITE callback_url = get_request.build_absolute_uri("/social/%s/callback" % self.TEST_SITE) oauth_url, auth_data = self.social_center.start_authentication(self.TEST_SITE, callback_url) auth_response = sn_views.social_auth(get_request, self.TEST_SITE) self.assertIn(test_auth_data_key, get_request.session) self.assertEqual(get_request.session[test_auth_data_key], auth_data) self.assertEqual(auth_response.status_code, 302) self.assertEqual(auth_response.url, oauth_url) def test_social_callback_view_has_correct_elements(self): get_request = self.generate_get_request(self.user) not_found_response = sn_views.social_callback(get_request, "non_existant_site") self.assertEqual(not_found_response.status_code, 404) self.assertRaises(Exception, sn_views.social_callback, get_request, self.TEST_SITE) self.assertRaises(Exception, sn_views.social_callback, get_request, self.TEST_PAGED_SITE) test_client_token_name = self.test_bot.get_client_token_name() test_paged_client_token_name = self.test_paged_bot.get_client_token_name() test_auth_data_key = "%s_auth_data" % self.TEST_SITE test_paged_auth_data_key = "%s_auth_data" % self.TEST_PAGED_SITE test_auth_data = self.test_bot.start_authentication("http://testapp.com/")[1] test_paged_auth_data = self.test_paged_bot.start_authentication("http://testapp.com/")[1] test_request = copy.deepcopy(get_request) test_request.session = { test_auth_data_key : test_auth_data} test_request.GET[test_client_token_name] = "invalid_code" test_invalid_code_response = sn_views.social_callback(test_request, self.TEST_SITE) self.assertEqual(test_invalid_code_response.status_code, 500) test_request.session = { test_auth_data_key : test_auth_data} test_request.GET[test_client_token_name] = "valid_code" test_valid_code_response = sn_views.social_callback(test_request, self.TEST_SITE) self.assertEqual(test_valid_code_response.status_code, 302) self.assertEqual(test_valid_code_response.url, "/social/") test_paged_request = copy.deepcopy(get_request) test_paged_request.session = { test_paged_auth_data_key : test_paged_auth_data} test_paged_request.GET[test_paged_client_token_name] = self.test_paged_bot._valid_client_token test_paged_valid_code_response = sn_views.social_callback(test_paged_request, self.TEST_PAGED_SITE) pages = self.social_center.get_pages(self.TEST_PAGED_SITE, self.test_paged_bot._valid_main_token) expected_html = render_to_string("socialnetwork-select-page.html", { "pages" : pages, "root_uri" : "/social/", "process_uri" : "/social/%s/page" % self.TEST_PAGED_SITE }) self.assertEqual(test_paged_valid_code_response.content.decode(), expected_html)
class RequestTestCase(TestCase): """Test Case 9: Social Center Views Must Render """ TEST_SITE = "test" TEST_PAGED_SITE = "test_paged" @staticmethod def generate_user_with_permissions(): admin_group = Group.objects.create(name="CMSAdmin") user = User.objects.create_user(username='******') user.groups.add(admin_group) # user.user_permissions.add(Permission.objects.get(codename="add_socialtoken")) # user.user_permissions.add(Permission.objects.get(codename="change_socialtoken")) # user.user_permissions.add(Permission.objects.get(codename="delete_socialtoken")) # user = User.objects.get(pk=user.pk) return user @staticmethod def generate_get_request(user): get_request = HttpRequest() get_request.method = "GET" get_request.session = {} get_request.user = user get_request.META["SERVER_NAME"] = "testapp.com" get_request.META["SERVER_PORT"] = "12345" return get_request @classmethod def setUpClass(self): self.user = self.generate_user_with_permissions() self.test_bot = TestBot() self.test_paged_bot = TestBotWithPages() self.social_center = SocialCenter() self.default_site_info = self.social_center.get_sites() self.social_center.add_site(self.TEST_SITE, self.test_bot) self.social_center.add_site(self.TEST_PAGED_SITE, self.test_paged_bot) @classmethod def tearDownClass(self): self.user.delete() self.social_center.logout(self.TEST_SITE) self.social_center.logout(self.TEST_PAGED_SITE) self.social_center.remove_site(self.TEST_SITE) self.social_center.remove_site(self.TEST_PAGED_SITE) del self.social_center del self.test_bot del self.test_paged_bot def test_social_view_has_correct_elements(self): sites = self.social_center.get_sites() for site_id, site in sites.items(): site["auth_uri"] = "/social/%s/auth" % site_id expected_html = render_to_string("socialnetwork-main.html", {"sites": sites}) request = self.generate_get_request(self.user) request.method = "POST" invalid_response = sn_views.social(request) request.method = "GET" valid_response = sn_views.social(request) self.assertNotEqual(invalid_response.content.decode(), expected_html) self.assertEqual(valid_response.content.decode(), expected_html) # Test view changes after one site has been authenticated self.social_center.authenticate(self.TEST_SITE, "main_token", "sub_token") updated_sites = self.social_center.get_sites() for site_id, site in updated_sites.items(): site["auth_uri"] = "/social/%s/auth" % site_id updated_sites[self.TEST_SITE][ "logout_uri"] = "/social/%s/logout" % self.TEST_SITE request.method = "GET" updated_valid_response = sn_views.social(request) updated_expected_html = render_to_string("socialnetwork-main.html", {"sites": updated_sites}) self.social_center.logout(self.TEST_SITE) self.assertEqual(updated_valid_response.content.decode(), updated_expected_html) def test_social_test_view_has_correct_elements(self): expected_html = render_to_string("socialnetwork-post-test.html", {"social_post_uri": "/social/post"}) request = self.generate_get_request(self.user) request.method = "POST" invalid_response = sn_views.social_test(request) request.method = "GET" valid_response = sn_views.social_test(request) self.assertNotEqual(invalid_response.content.decode(), expected_html) self.assertEqual(valid_response.content.decode(), expected_html) def test_social_auth_view_has_correct_elements(self): get_request = self.generate_get_request(self.user) not_found_response = sn_views.social_auth(get_request, "non_existant_site") self.assertEqual(not_found_response.status_code, 404) self.social_center.authenticate(self.TEST_SITE, "main_token", "sub_token") already_logged_in_response = sn_views.social_auth( get_request, self.TEST_SITE) self.assertEqual(already_logged_in_response.status_code, 302) self.assertEqual(already_logged_in_response.url, "/social/") self.social_center.logout(self.TEST_SITE) test_auth_data_key = "%s_auth_data" % self.TEST_SITE callback_url = get_request.build_absolute_uri("/social/%s/callback" % self.TEST_SITE) oauth_url, auth_data = self.social_center.start_authentication( self.TEST_SITE, callback_url) auth_response = sn_views.social_auth(get_request, self.TEST_SITE) self.assertIn(test_auth_data_key, get_request.session) self.assertEqual(get_request.session[test_auth_data_key], auth_data) self.assertEqual(auth_response.status_code, 302) self.assertEqual(auth_response.url, oauth_url) def test_social_callback_view_has_correct_elements(self): get_request = self.generate_get_request(self.user) not_found_response = sn_views.social_callback(get_request, "non_existant_site") self.assertEqual(not_found_response.status_code, 404) self.assertRaises(Exception, sn_views.social_callback, get_request, self.TEST_SITE) self.assertRaises(Exception, sn_views.social_callback, get_request, self.TEST_PAGED_SITE) test_client_token_name = self.test_bot.get_client_token_name() test_paged_client_token_name = self.test_paged_bot.get_client_token_name( ) test_auth_data_key = "%s_auth_data" % self.TEST_SITE test_paged_auth_data_key = "%s_auth_data" % self.TEST_PAGED_SITE test_auth_data = self.test_bot.start_authentication( "http://testapp.com/")[1] test_paged_auth_data = self.test_paged_bot.start_authentication( "http://testapp.com/")[1] test_request = copy.deepcopy(get_request) test_request.session = {test_auth_data_key: test_auth_data} test_request.GET[test_client_token_name] = "invalid_code" test_invalid_code_response = sn_views.social_callback( test_request, self.TEST_SITE) self.assertEqual(test_invalid_code_response.status_code, 500) test_request.session = {test_auth_data_key: test_auth_data} test_request.GET[test_client_token_name] = "valid_code" test_valid_code_response = sn_views.social_callback( test_request, self.TEST_SITE) self.assertEqual(test_valid_code_response.status_code, 302) self.assertEqual(test_valid_code_response.url, "/social/") test_paged_request = copy.deepcopy(get_request) test_paged_request.session = { test_paged_auth_data_key: test_paged_auth_data } test_paged_request.GET[ test_paged_client_token_name] = self.test_paged_bot._valid_client_token test_paged_valid_code_response = sn_views.social_callback( test_paged_request, self.TEST_PAGED_SITE) pages = self.social_center.get_pages( self.TEST_PAGED_SITE, self.test_paged_bot._valid_main_token) expected_html = render_to_string( "socialnetwork-select-page.html", { "pages": pages, "root_uri": "/social/", "process_uri": "/social/%s/page" % self.TEST_PAGED_SITE }) self.assertEqual(test_paged_valid_code_response.content.decode(), expected_html)
class SocialCenterPageTestCase(TestCase): """Test Case 5: Social Center Must Retrieve Pages """ TEST_SITE = "test" TEST_PAGED_SITE = "test_paged" @classmethod def setUpClass(self): self.test_bot = TestBot() self.test_paged_bot = TestBotWithPages() self.social_center = SocialCenter() self.social_center.add_site(self.TEST_SITE, self.test_bot) self.social_center.add_site(self.TEST_PAGED_SITE, self.test_paged_bot) self.social_center.authenticate(self.TEST_SITE, "test_main_token", "test_sub_token") self.social_center.authenticate(self.TEST_PAGED_SITE, "test_main_token", "test_sub_token") @classmethod def tearDownClass(self): self.social_center.logout(self.TEST_SITE) self.social_center.logout(self.TEST_PAGED_SITE) self.social_center.remove_site(self.TEST_SITE) self.social_center.remove_site(self.TEST_PAGED_SITE) del self.social_center del self.test_bot del self.test_paged_bot def test_case(self): self.only_paged_site_has_pages() self.can_get_pages() def only_paged_site_has_pages(self): self.assertFalse(self.social_center.must_select_page(self.TEST_SITE)) self.assertTrue( self.social_center.must_select_page(self.TEST_PAGED_SITE)) self.assertRaises(NotImplementedError, self.social_center.get_pages, self.TEST_SITE, "any_token") # Should not raise any errors: pages = self.social_center.get_pages( self.TEST_PAGED_SITE, self.test_paged_bot._valid_main_token) def can_get_pages(self): self.social_center.authenticate(self.TEST_PAGED_SITE, "test_main_token", "test_sub_token") invalid_pages = self.social_center.get_pages(self.TEST_PAGED_SITE, "invalid_request_token") self.assertFalse(invalid_pages) valid_pages = self.social_center.get_pages( self.TEST_PAGED_SITE, self.test_paged_bot._valid_main_token) self.assertTrue(valid_pages) self.assertEqual(len(valid_pages), 10) for i in range(10): page = valid_pages[i] self.assertEqual(page["id"], str(i + 1)) self.assertEqual(page["name"], "Page " + str(i + 1))