def test_translated(self): bylicense30ported = ToolFactory(unit="by-nc", version="3.0", jurisdiction_code="ar") bylicense30unported = ToolFactory(unit="by-nc", version="3.0", jurisdiction_code="") bylicense40 = ToolFactory(unit="by-nc", version="4.0", jurisdiction_code="") zerov1declaration = ToolFactory(unit="zero", version="1.0", jurisdiction_code="") should_be_translated = [ LegalCodeFactory(tool=bylicense40), LegalCodeFactory(tool=zerov1declaration), ] should_not_be_translated = [ LegalCodeFactory(tool=bylicense30ported), LegalCodeFactory(tool=bylicense30unported), ] self.assertCountEqual(should_be_translated, list(LegalCode.objects.translated())) self.assertCountEqual( should_not_be_translated, set(LegalCode.objects.all()) - set(LegalCode.objects.translated()), )
def test_get_publish_files_mark_legal_code(self): legal_code = LegalCodeFactory( tool__category="publicdomain", tool__deed_only=True, tool__unit="mark", tool__version="1.0", language_code="en", ) returned_list = legal_code.get_publish_files("legalcode") self.assertEqual( [ # relpath None, # symlinks [], # redirects_data [ { "destination": "deed.en", "language_code": "en", "redirect_file": ("publicdomain/mark/1.0/legalcode.en-us.html"), "title": "", }, { "destination": "deed.en", "language_code": "en", "redirect_file": ("publicdomain/mark/1.0/legalcode.en_us.html"), "title": "", }, { "destination": "deed.en", "language_code": "en", "redirect_file": ("publicdomain/mark/1.0/legalcode.en.html"), "title": "", }, { "destination": "deed.en", "language_code": "en", "redirect_file": ("publicdomain/mark/1.0/legalcode.html"), "title": "", }, ], ], returned_list, )
def test_get_redirect_pairs_4(self): tool = ToolFactory(category="license", unit="by", version="4.0") legal_code = LegalCodeFactory(tool=tool, language_code="nl") redirect_pairs = legal_code.get_redirect_pairs("deed") self.assertEqual( [["license/by/4.0/deed.NL", "license/by/4.0/deed.nl"]], redirect_pairs, )
def test_get_pofile(self): legal_code = LegalCodeFactory() test_pofile = polib.POFile() test_translation_filename = "/dev/null" with mock.patch.object(LegalCode, "translation_filename") as mock_tf: mock_tf.return_value = test_translation_filename with mock.patch.object(polib, "pofile") as mock_pofile: mock_pofile.return_value = test_pofile result = legal_code.get_pofile() mock_pofile.assert_called_with("", encoding="utf-8") self.assertEqual(test_pofile, result)
def test_get_translation_object(self): # get_translation_object on the model calls the # i18n.utils.get_translation_object. legal_code = LegalCodeFactory( tool__version="4.0", tool__unit="by-sa", language_code="de", ) with mock.patch( "legal_tools.models.get_translation_object") as mock_djt: legal_code.get_translation_object() mock_djt.assert_called_with(django_language_code="de", domain="by-sa_40")
def test_valid(self): bylicense30ported = ToolFactory(unit="by-nc", version="3.0", jurisdiction_code="ar") bylicense30unported = ToolFactory(unit="by-nc", version="3.0", jurisdiction_code="") nonbylicense30ported = ToolFactory(unit="xyz", version="3.0", jurisdiction_code="ar") nonbylicense30unported = ToolFactory(unit="xyz", version="3.0", jurisdiction_code="") bylicense40 = ToolFactory(unit="by-nc", version="4.0", jurisdiction_code="") nonbylicense40 = ToolFactory(unit="xyz", version="4.0", jurisdiction_code="") zerov1declaration = ToolFactory(unit="zero", version="1.0", jurisdiction_code="") nonzerov1declaration = ToolFactory(unit="xyz", version="1.0", jurisdiction_code="") # Test valid() should_be_valid = [ LegalCodeFactory(tool=bylicense30ported), LegalCodeFactory(tool=bylicense30unported), LegalCodeFactory(tool=bylicense40), LegalCodeFactory(tool=zerov1declaration), ] should_not_be_valid = [ LegalCodeFactory(tool=nonbylicense30ported), LegalCodeFactory(tool=nonbylicense30unported), LegalCodeFactory(tool=nonbylicense40), LegalCodeFactory(tool=nonzerov1declaration), ] self.assertCountEqual(should_be_valid, list(LegalCode.objects.valid())) self.assertCountEqual( should_not_be_valid, set(LegalCode.objects.all()) - set(LegalCode.objects.valid()), ) # Test validgroups() self.assertCountEqual( should_be_valid, list(LegalCode.objects.validgroups()["Licenses 4.0"]) + list(LegalCode.objects.validgroups()["Licenses 3.0"]) + list(LegalCode.objects.validgroups()["Public Domain all"]), ) self.assertCountEqual( should_not_be_valid, set(LegalCode.objects.all()) - set( list(LegalCode.objects.validgroups()["Licenses 4.0"]) + list(LegalCode.objects.validgroups()["Licenses 3.0"]) + list(LegalCode.objects.validgroups()["Public Domain all"])), )
def test_get_legal_code_for_language_code(self): tool = ToolFactory() lc_pt = LegalCodeFactory(tool=tool, language_code="pt") lc_en = LegalCodeFactory(tool=tool, language_code="en") with override(language="pt"): result = tool.get_legal_code_for_language_code(None) self.assertEqual(lc_pt.id, result.id) result = tool.get_legal_code_for_language_code("pt") self.assertEqual(lc_pt.id, result.id) result = tool.get_legal_code_for_language_code("en") self.assertEqual(lc_en.id, result.id) with self.assertRaises(LegalCode.DoesNotExist): tool.get_legal_code_for_language_code("en_us")
def test_translation_filename(self): data = [ # (expected, unit, version, jurisdiction, language) ( "/foo/legalcode/de/LC_MESSAGES/by-sa_03.po", "by-sa", "0.3", "", "de", ), ( "/foo/legalcode/de/LC_MESSAGES/by-sa_03_xx.po", "by-sa", "0.3", "xx", "de", ), ] for expected, unit, version, jurisdiction, language in data: with self.subTest(expected): tool = ToolFactory( unit=unit, version=version, jurisdiction_code=jurisdiction, ) self.assertEqual( expected, LegalCodeFactory( tool=tool, language_code=language).translation_filename(), )
def test_legal_code_translation_by_40_es(self): tool = ToolFactory( category="licenses", canonical_url="https://creativecommons.org/licenses/by/4.0/", version="4.0", ) legal_code = LegalCodeFactory( tool=tool, language_code="es", ) url = legal_code.legal_code_url rsp = self.client.get(url) text = rsp.content.decode("utf-8") self.assertEqual(f"{rsp.status_code} {url}", f"200 {url}") self.assertEqual("es", rsp.context["legal_code"].language_code) if ("INVALID_VARIABLE" in text): # Some unresolved variable in the template msgs = ["INVALID_VARIABLE in output"] for line in text.splitlines(): if "INVALID_VARIABLE" in line: msgs.append(line) self.fail("\n".join(msgs)) self.assertContains(rsp, "Sección 1 – Definiciones") self.assertContains( rsp, 'Sección 4 – Derechos "Sui Generis" sobre Bases de Datos.') self.assertContains(rsp, "Sección 8 – Interpretación")
def test_str(self): LegalCodeFactory() legal_code = LegalCode.objects.first() self.assertEqual( str(legal_code), f"LegalCode<{legal_code.language_code}," f" {str(legal_code.tool)}>", )
def test_has_english(self): tool = ToolFactory() lc_fr = LegalCodeFactory(tool=tool, language_code="fr") self.assertFalse(lc_fr.has_english()) lc_en = LegalCodeFactory(tool=tool, language_code="en") self.assertTrue(lc_fr.has_english()) self.assertTrue(lc_en.has_english())
def test_get_publish_files_by_nc3_legal_code_ca_en(self): legal_code = LegalCodeFactory( tool__category="licenses", tool__jurisdiction_code="ca", tool__unit="by-nc", tool__version="3.0", language_code="en", ) returned_list = legal_code.get_publish_files("legalcode") self.assertEqual( [ # relpath "licenses/by-nc/3.0/ca/legalcode.en.html", # symlinks ["legalcode.html"], # redirects_data [ { "destination": "legalcode.en", "language_code": "en", "redirect_file": ("licenses/by-nc/3.0/ca/legalcode.en-us.html"), "title": "", }, { "destination": "legalcode.en", "language_code": "en", "redirect_file": ("licenses/by-nc/3.0/ca/legalcode.en_us.html"), "title": "", }, ], ], returned_list, )
def test_get_publish_files_by_nc_nd_4_legal_code_zh_hant(self): legal_code = LegalCodeFactory( tool__category="licenses", tool__unit="by-nc-nd", tool__version="4.0", language_code="zh-hant", ) returned_list = legal_code.get_publish_files("legalcode") self.assertEqual( [ # relpath "licenses/by-nc-nd/4.0/legalcode.zh-hant.html", # symlinks [], # redirects_data [ { "destination": "legalcode.zh-hant", "language_code": "zh-hant", "redirect_file": ("licenses/by-nc-nd/4.0/legalcode.zh-tw.html"), "title": "", }, { "destination": "legalcode.zh-hant", "language_code": "zh-hant", "redirect_file": ("licenses/by-nc-nd/4.0/legalcode.zh_tw.html"), "title": "", }, ], ], returned_list, )
def test_get_publish_files_zero_legal_code_en(self): legal_code = LegalCodeFactory( tool__category="publicdomain", tool__unit="zero", tool__version="1.0", language_code="en", ) returned_list = legal_code.get_publish_files("legalcode") self.assertEqual( [ # relpath "publicdomain/zero/1.0/legalcode.en.html", # symlinks ["legalcode.html"], # redirects_data [ { "destination": "legalcode.en", "language_code": "en", "redirect_file": ("publicdomain/zero/1.0/legalcode.en-us.html"), "title": "", }, { "destination": "legalcode.en", "language_code": "en", "redirect_file": ("publicdomain/zero/1.0/legalcode.en_us.html"), "title": "", }, ], ], returned_list, )
def test_view_deed_template_body_unimplemented(self): lc = LegalCodeFactory( tool__canonical_url="https://creativecommons.org/licenses/x/0.0", tool__unit="x", tool__version="0.0", language_code="en", ) url = lc.deed_url rsp = self.client.get(url) self.assertEqual(200, rsp.status_code) self.assertTemplateUsed("includes/deed_body_unimplemented.html")
def test_view_deed_template_body_mark(self): lc = LegalCodeFactory( tool__canonical_url="https://creativecommons.org/publicdomain/" "mark/1.0/", tool__unit="mark", tool__version="1.0", language_code="en", ) url = lc.deed_url rsp = self.client.get(url) self.assertEqual(200, rsp.status_code) self.assertTemplateUsed("includes/deed_body_mark.html")
def test_get_publish_files_zero_deed_nl(self): legal_code = LegalCodeFactory( tool__category="publicdomain", tool__unit="zero", tool__version="1.0", language_code="nl", ) returned_list = legal_code.get_publish_files("deed") self.assertEqual( [ # relpath "publicdomain/zero/1.0/deed.nl.html", # symlinks [], # redirects_data [], ], returned_list, )
def test_get_publish_files_by_sa3_legal_code_am_hy(self): legal_code = LegalCodeFactory( tool__category="licenses", tool__jurisdiction_code="am", tool__unit="by-sa", tool__version="3.0", language_code="hy", ) returned_list = legal_code.get_publish_files("legalcode") self.assertEqual( [ # relpath "licenses/by-sa/3.0/am/legalcode.hy.html", # symlinks ["legalcode.html"], # redirects_data [], ], returned_list, )
def test_branch_name(self): legal_code = LegalCodeFactory( tool__version="4.0", tool__unit="by-sa", language_code="de", ) self.assertEqual("cc4-de", legal_code.branch_name()) legal_code = LegalCodeFactory( tool__version="3.5", tool__unit="other", language_code="de", ) self.assertEqual("other-35-de", legal_code.branch_name()) legal_code = LegalCodeFactory( tool__version="3.5", tool__unit="other", language_code="de", tool__jurisdiction_code="xyz", ) self.assertEqual("other-35-de-xyz", legal_code.branch_name())
def test_get_publish_files_by_nc_nd4_deed_en(self): legal_code = LegalCodeFactory( tool__category="licenses", tool__unit="by-nc-nd", tool__version="4.0", language_code="en", ) returned_list = legal_code.get_publish_files("deed") self.assertEqual( [ # relpath "licenses/by-nc-nd/4.0/deed.en.html", # symlinks ["deed.html", "index.html"], # redirects_data [ { "destination": "deed.en", "language_code": "en", "redirect_file": ("licenses/by-nc-nd/4.0/deed.en-us.html"), "title": "", }, { "destination": "deed.en", "language_code": "en", "redirect_file": ("licenses/by-nc-nd/4.0/deed.en_us.html"), "title": "", }, ], ], returned_list, )
def test_translation_domain(self): data = [ # (expected, unit, version, jurisdiction, language) ("by-sa_30", "by-sa", "3.0", "", "fr"), ("by-sa_30_xx", "by-sa", "3.0", "xx", "fr"), ] for expected, unit, version, jurisdiction, language in data: with self.subTest(expected): legal_code = LegalCodeFactory( tool__unit=unit, tool__version=version, tool__jurisdiction_code=jurisdiction, language_code=language, ) self.assertEqual(expected, legal_code.translation_domain)
def test_view_legal_code_identifying_jurisdiction_default_language(self): language_code = "de" lc = LegalCodeFactory( html="crude", language_code=language_code, tool__category="licenses", tool__canonical_url="https://creativecommons.org" "/licenses/by/3.0/de/", tool__version="3.0", tool__jurisdiction_code="de", ) url = lc.legal_code_url rsp = self.client.get(url) self.assertEqual(200, rsp.status_code) self.assertTemplateUsed(rsp, "legalcode.html") self.assertTemplateUsed(rsp, "includes/legalcode_crude_html.html") context = rsp.context self.assertContains(rsp, f'lang="{language_code}"') self.assertEqual(lc, context["legal_code"])
def test_view_deed_jurisdiction_language(self): lc = LegalCode.objects.filter( tool__unit="by-sa", tool__version="3.0", tool__jurisdiction_code="es", )[0] tool = lc.tool language_code = "fr" lc = LegalCodeFactory(tool=tool, language_code=language_code) # "<code:unit>/<version:version>/<jurisdiction:jurisdiction> # /deed.<lang:target_lang>" url = lc.deed_url # Mock 'get_translation_object' because we have no 3.0 translations # imported yet and we can't use 4.0 to test jurisdictions. translation_object = DjangoTranslation(language="fr") with mock.patch.object(LegalCode, "get_translation_object") as mock_gto: mock_gto.return_value = translation_object rsp = self.client.get(url) self.assertEqual(200, rsp.status_code)
def test_get_english_pofile_path(self): legal_code = LegalCodeFactory( tool__version="4.0", tool__unit="by-sa", language_code="de", ) legal_code_en = LegalCodeFactory(tool=legal_code.tool, language_code=settings.LANGUAGE_CODE) expected_path = "/some/dir/legalcode/en/LC_MESSAGES/by-sa_40.po" with mock.patch.object( Tool, "get_legal_code_for_language_code") as mock_glfl: mock_glfl.return_value = legal_code_en self.assertEqual(expected_path, legal_code.get_english_pofile_path()) self.assertEqual(expected_path, legal_code_en.get_english_pofile_path()) mock_glfl.assert_called_with(settings.LANGUAGE_CODE)
def test_view_legal_code(self): tool = ToolFactory( category="licenses", canonical_url="https://creativecommons.org/licenses/by/4.0/", version="4.0", ) for language_code in ["es", "ar", settings.LANGUAGE_CODE]: lc = LegalCodeFactory( tool=tool, language_code=language_code, ) url = lc.legal_code_url rsp = self.client.get(url) self.assertEqual(200, rsp.status_code) self.assertTemplateUsed(rsp, "legalcode.html") self.assertTemplateUsed(rsp, "includes/legalcode_licenses_4.0.html") context = rsp.context self.assertEqual(lc, context["legal_code"]) self.assertContains(rsp, f'lang="{language_code}"') if language_code == "es": self.assertContains(rsp, 'dir="ltr"') elif language_code == "ar": self.assertContains(rsp, 'dir="rtl"')
def test_get_metadata(self): # Ported tool = ToolFactory( **{ "canonical_url": ( "https://creativecommons.org/licenses/by-nc/3.0/xyz/"), "category": "licenses", "unit": "by-nc", "version": "3.0", "jurisdiction_code": "xyz", "permits_derivative_works": False, "permits_reproduction": False, "permits_distribution": True, "permits_sharing": True, "requires_share_alike": True, "requires_notice": True, "requires_attribution": True, "requires_source_code": True, "prohibits_commercial_use": True, "prohibits_high_income_nation_use": False, }) LegalCodeFactory(tool=tool, language_code="pt") LegalCodeFactory(tool=tool, language_code="en") data = tool.get_metadata() expected_data = { "jurisdiction_name": "UNDEFINED", "unit": "by-nc", "permits_derivative_works": False, "permits_distribution": True, "permits_reproduction": False, "permits_sharing": True, "prohibits_commercial_use": True, "prohibits_high_income_nation_use": False, "requires_attribution": True, "requires_notice": True, "requires_share_alike": True, "requires_source_code": True, "legal_code_languages": { "en": "English", "pt": "Portuguese", }, "version": "3.0", } for key in expected_data.keys(): self.assertEqual(expected_data[key], data[key]) # Unported tool = ToolFactory( **{ "canonical_url": ( "https://creativecommons.org/licenses/by-nc/3.0/"), "category": "licenses", "unit": "by-nc", "version": "3.0", "jurisdiction_code": "", "permits_derivative_works": False, "permits_reproduction": False, "permits_distribution": True, "permits_sharing": True, "requires_share_alike": True, "requires_notice": True, "requires_attribution": True, "requires_source_code": True, "prohibits_commercial_use": True, "prohibits_high_income_nation_use": False, }) LegalCodeFactory(tool=tool, language_code="en") data = tool.get_metadata() expected_data = { "unit": "by-nc", "version": "3.0", "permits_derivative_works": False, "permits_distribution": True, "permits_reproduction": False, "permits_sharing": True, "prohibits_commercial_use": True, "prohibits_high_income_nation_use": False, "requires_attribution": True, "requires_notice": True, "requires_share_alike": True, "requires_source_code": True, "legal_code_languages": { "en": "English", }, } for key in expected_data.keys(): self.assertEqual(expected_data[key], data[key]) # Deprecated tool = ToolFactory( **{ "canonical_url": ( "https://creativecommons.org/licenses/sampling/1.0/"), "category": "licenses", "unit": "sampling", "version": "1.0", "jurisdiction_code": "", "deprecated_on": "2007-06-04", "permits_derivative_works": True, "permits_reproduction": True, "permits_distribution": True, "permits_sharing": True, "requires_share_alike": False, "requires_notice": True, "requires_attribution": True, "requires_source_code": False, "prohibits_commercial_use": False, "prohibits_high_income_nation_use": False, }) LegalCodeFactory(tool=tool, language_code="en") data = tool.get_metadata() expected_data = { "unit": "sampling", "version": "1.0", "deprecated_on": "2007-06-04", "permits_derivative_works": True, "permits_distribution": True, "permits_reproduction": True, "permits_sharing": True, "prohibits_commercial_use": False, "prohibits_high_income_nation_use": False, "requires_attribution": True, "requires_notice": True, "requires_share_alike": False, "requires_source_code": False, "legal_code_languages": { "en": "English", }, } for key in expected_data.keys(): self.assertEqual(expected_data[key], data[key]) # Deed-only tool = ToolFactory( **{ "canonical_url": ( "https://creativecommons.org/publicdomain/mark/1.0/"), "category": "publicdomain", "unit": "mark", "version": "1.0", "jurisdiction_code": "", "deed_only": True, "deprecated_on": "2007-06-04", "permits_derivative_works": True, "permits_reproduction": True, "permits_distribution": True, "permits_sharing": True, "requires_share_alike": False, "requires_notice": False, "requires_attribution": False, "requires_source_code": False, "prohibits_commercial_use": False, "prohibits_high_income_nation_use": False, }) LegalCodeFactory(tool=tool, language_code="en") data = tool.get_metadata() expected_data = { "unit": "mark", "version": "1.0", "deprecated_on": "2007-06-04", "permits_derivative_works": True, "permits_distribution": True, "permits_reproduction": True, "permits_sharing": True, "prohibits_commercial_use": False, "prohibits_high_income_nation_use": False, "requires_attribution": False, "requires_notice": False, "requires_share_alike": False, "requires_source_code": False, } for key in expected_data.keys(): self.assertEqual(expected_data[key], data[key])
def setUp(self): self.by = ToolFactory( canonical_url="https://creativecommons.org/licenses/by/4.0/", category="licenses", unit="by", version="4.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) self.by_nc = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-nc/4.0/", category="licenses", unit="by-nc", version="4.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=True, prohibits_high_income_nation_use=False, ) self.by_nc_nd = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-nc-nd/4.0/", category="licenses", unit="by-nc-nd", version="4.0", permits_derivative_works=False, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=True, prohibits_high_income_nation_use=False, ) self.by_nc_sa = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-nc-sa/4.0/", category="licenses", unit="by-nc-sa", version="4.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=True, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=True, prohibits_high_income_nation_use=False, ) self.by_nd = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-nd/4.0/", category="licenses", unit="by-nd", version="4.0", permits_derivative_works=False, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) self.by_sa = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-sa/4.0/", category="licenses", unit="by-sa", version="4.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=True, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) self.by = ToolFactory( canonical_url="https://creativecommons.org/licenses/by/3.0/", category="licenses", unit="by", version="3.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) self.by = ToolFactory( canonical_url="https://creativecommons.org/licenses/by/2.0/", category="licenses", unit="by", version="2.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) self.zero = ToolFactory( canonical_url="https://creativecommons.org/publicdomain/zero/1.0/", category="publicdomain", unit="zero", version="1.0", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=False, requires_notice=False, requires_attribution=False, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) for tool in Tool.objects.all(): LegalCodeFactory(tool=tool, language_code="en") LegalCodeFactory(tool=tool, language_code="es") LegalCodeFactory(tool=tool, language_code="fr") self.by_sa_30_es = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-sa/3.0/es/", category="licenses", unit="by-sa", version="3.0", jurisdiction_code="es", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=True, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) LegalCodeFactory(tool=self.by_sa_30_es, language_code="es") # Default lang self.by_sa_20_es = ToolFactory( canonical_url="https://creativecommons.org/licenses/by-sa/2.0/es/", category="licenses", unit="by-sa", version="2.0", jurisdiction_code="es", permits_derivative_works=True, permits_reproduction=True, permits_distribution=True, permits_sharing=True, requires_share_alike=True, requires_notice=True, requires_attribution=True, requires_source_code=False, prohibits_commercial_use=False, prohibits_high_income_nation_use=False, ) LegalCodeFactory(tool=self.by_sa_20_es, language_code="es") # Default lang super().setUp()