# Copyright (C) 2020 FreeIPA Contributors see COPYING for license import os import pytest from ipalib import facts from ipatests.test_ipaserver.httptest import Unauthorized_HTTP_test from ipatests.util import assert_equal, assert_not_equal from ipaplatform.paths import paths @pytest.mark.tier1 @pytest.mark.skipif( not facts.is_ipa_configured(), reason="Requires configured IPA server", ) class test_jsplugins(Unauthorized_HTTP_test): app_uri = '/ipa/ui/js/freeipa/plugins.js' jsplugins = (('foo', 'foo.js'), ('bar', '')) content_type = 'application/javascript' def test_jsplugins(self): empty_response = "define([],function(){return[];});" # Step 1: make sure default response has no additional plugins response = self.send_request(method='GET') assert_equal(response.status, 200) response_data = response.read().decode(encoding='utf-8') assert_equal(response_data, empty_response) # Step 2: add fake plugins try: for (d, f) in self.jsplugins: dir = os.path.join(paths.IPA_JS_PLUGINS_DIR, d) if not os.path.exists(dir): os.mkdir(dir, 0o755) if f: with open(os.path.join(dir, f), 'w') as js: js.write("/* test js plugin */") except OSError as e: pytest.skip( 'Cannot set up test JS plugin: %s' % e ) # Step 3: query plugins to see if our plugins exist response = self.send_request(method='GET') assert_equal(response.status, 200) response_data = response.read().decode(encoding='utf-8') assert_not_equal(response_data, empty_response) for (d, f) in self.jsplugins: if f: assert "'" + d + "'" in response_data else: assert "'" + d + "'" not in response_data # Step 4: remove fake plugins try: for (d, f) in self.jsplugins: dir = os.path.join(paths.IPA_JS_PLUGINS_DIR, d) file = os.path.join(dir, f) if f and os.path.exists(file): os.unlink(file) if os.path.exists(dir): os.rmdir(dir) except OSError: pass # Step 5: make sure default response has no additional plugins response = self.send_request(method='GET') assert_equal(response.status, 200) response_data = response.read().decode(encoding='utf-8') assert_equal(response_data, empty_response)