예제 #1
0
 def test_global_memory_superuser(self):
     self.user.is_superuser = True
     self.user.save()
     self.test_memory(
         "Number of entries on the whole platform",
         False,
         kwargs={"manage": "manage"},
     )
     # Download all entries
     response = self.client.get(
         reverse("memory-download", kwargs={"manage": "manage"}),
         {
             "format": "json",
             "kind": "all"
         },
     )
     validate(response.json(), load_schema("weblate-memory.schema.json"))
     # Download shared entries
     response = self.client.get(
         reverse("memory-download", kwargs={"manage": "manage"}),
         {
             "format": "json",
             "kind": "shared"
         },
     )
     validate(response.json(), load_schema("weblate-memory.schema.json"))
예제 #2
0
 def import_json(self, request, fileobj, origin=None, **kwargs):
     content = fileobj.read()
     try:
         data = json.loads(force_str(content))
     except ValueError as error:
         report_error(cause="Failed to parse memory")
         raise MemoryImportError(
             _("Failed to parse JSON file: {!s}").format(error))
     try:
         validate(data, load_schema("weblate-memory.schema.json"))
     except ValidationError as error:
         report_error(cause="Failed to validate memory")
         raise MemoryImportError(
             _("Failed to parse JSON file: {!s}").format(error))
     found = 0
     lang_cache = {}
     for entry in data:
         try:
             self.update_entry(
                 source_language=Language.objects.get_by_code(
                     entry["source_language"], lang_cache),
                 target_language=Language.objects.get_by_code(
                     entry["target_language"], lang_cache),
                 source=entry["source"],
                 target=entry["target"],
                 origin=origin,
                 **kwargs,
             )
             found += 1
         except Language.DoesNotExist:
             continue
     return found
예제 #3
0
 def test_global_memory_superuser(self):
     self.user.is_superuser = True
     self.user.save()
     self.test_memory("Number of uploaded shared entries", False, prefix="manage-")
     # Download all entries
     response = self.client.get(
         reverse("manage-memory-download"),
         {"format": "json", "kind": "all"},
     )
     validate(response.json(), load_schema("weblate-memory.schema.json"))
     # Download shared entries
     response = self.client.get(
         reverse("manage-memory-download"),
         {"format": "json", "kind": "shared"},
     )
     validate(response.json(), load_schema("weblate-memory.schema.json"))
예제 #4
0
def test_backup():
    """Test memory schema being valid."""
    validate(
        {
            "metadata": {
                "version": "4.13",
                "server": "Weblate",
                "domain": "weblate.example.com",
                "timestamp": "2021-11-18T18:53:54.862Z",
            },
            "project": {
                "name": "Hello",
                "slug": "hello",
                "web": "https://weblate.org/",
                "instructions": "",
                "set_language_team": False,
                "use_shared_tm": False,
                "contribute_shared_tm": False,
                "access_control": 0,
                "translation_review": False,
                "source_review": False,
                "enable_hooks": False,
                "language_aliases": "",
            },
            "labels": [],
        },
        load_schema("weblate-backup.schema.json"),
    )
예제 #5
0
    def test_memory(self,
                    match="Number of your entries",
                    fail=False,
                    **kwargs):
        response = self.client.get(reverse("memory", **kwargs))
        self.assertContains(response, match)

        # Test upload
        response = self.upload_file("memory.tmx", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "File processed")

        # Test download
        response = self.client.get(reverse("memory-download", **kwargs))
        validate(response.json(), load_schema("weblate-memory.schema.json"))

        # Test download
        response = self.client.get(reverse("memory-download", **kwargs),
                                   {"format": "tmx"})
        self.assertContains(response, "<tmx")
        response = self.client.get(reverse("memory-download", **kwargs),
                                   {"format": "json"})
        validate(response.json(), load_schema("weblate-memory.schema.json"))

        # Test invalid upload
        response = self.upload_file("cs.json", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Failed to parse JSON file")

        # Test invalid upload
        response = self.upload_file("memory-broken.json", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Failed to parse JSON file")

        # Test invalid upload
        response = self.upload_file("memory-invalid.json", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Failed to parse JSON file")
예제 #6
0
    def test_userdata(self):
        response = self.client.post(reverse("userdata"))
        self.assertContains(response, "basic")

        # Add more languages
        self.user.profile.languages.add(Language.objects.get(code="pl"))
        self.user.profile.secondary_languages.add(Language.objects.get(code="de"))
        self.user.profile.secondary_languages.add(Language.objects.get(code="uk"))
        response = self.client.post(reverse("userdata"))
        self.assertContains(response, '"pl"')
        self.assertContains(response, '"de"')
        validate(response.json(), load_schema("weblate-userdata.schema.json"))
예제 #7
0
def test_memory_newline():
    """Test memory entry containing newlines."""
    validate(
        [
            {
                "source": "Error reading config file {filename!r}:\n{error_msg}",
                "target": "Fehler der Konfigurationsdatei {filename!r}:\n{error_msg}",
                "source_language": "en",
                "target_language": "de",
                "origin": "myproject/mycomponent",
                "category": 10000004,
            }
        ],
        load_schema("weblate-memory.schema.json"),
    )
예제 #8
0
 def test_dump_command(self):
     add_document()
     output = StringIO()
     call_command("dump_memory", stdout=output)
     data = json.loads(output.getvalue())
     validate(data, load_schema("weblate-memory.schema.json"))
     self.assertEqual(
         data,
         [{
             "source_language": "en",
             "target_language": "cs",
             "source": "Hello",
             "target": "Ahoj",
             "origin": "test",
             "category": CATEGORY_FILE,
         }],
     )
예제 #9
0
def test_userdata():
    """Test user data schema being valid."""
    validate(
        {
            "basic": {
                "username": "******",
                "full_name": "Weblate Admin",
                "email": "*****@*****.**",
                "date_joined": "2019-11-18T18:53:54.862Z",
            },
            "profile": {
                "language": "cs",
                "suggested": 1,
                "translated": 24,
                "uploaded": 1,
                "hide_completed": False,
                "secondary_in_zen": True,
                "hide_source_secondary": False,
                "editor_link": "",
                "translate_mode": 0,
                "zen_mode": 0,
                "special_chars": "\u00a0 ",
                "dashboard_view": 1,
                "dashboard_component_list": None,
                "languages": ["cs", "vi"],
                "secondary_languages": ["sk"],
                "watched": ["weblate"],
            },
            "auditlog": [
                {
                    "address": "127.0.0.1",
                    "user_agent": "PC / Linux / Firefox 70.0",
                    "timestamp": "2019-11-18T18:58:30.845Z",
                    "activity": "login",
                },
            ],
        },
        load_schema("weblate-userdata.schema.json"),
    )
예제 #10
0
    def test_memory(
        self, match="Number of your entries", fail=False, prefix: str = "", **kwargs
    ):
        # Test wipe without confirmation
        response = self.client.get(reverse(f"{prefix}memory-delete", **kwargs))
        self.assertRedirects(response, reverse(f"{prefix}memory", **kwargs))

        response = self.client.post(reverse(f"{prefix}memory-delete", **kwargs))
        self.assertRedirects(response, reverse(f"{prefix}memory", **kwargs))

        # Test list
        response = self.client.get(reverse(f"{prefix}memory", **kwargs))
        self.assertContains(response, match)

        # Test upload
        response = self.upload_file("memory.tmx", prefix=prefix, **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "File processed")

        # Test download
        response = self.client.get(reverse(f"{prefix}memory-download", **kwargs))
        validate(response.json(), load_schema("weblate-memory.schema.json"))

        # Test download
        response = self.client.get(
            reverse(f"{prefix}memory-download", **kwargs), {"format": "tmx"}
        )
        self.assertContains(response, "<tmx")
        response = self.client.get(
            reverse(f"{prefix}memory-download", **kwargs),
            {"format": "tmx", "origin": "memory.tmx"},
        )
        self.assertContains(response, "<tmx")
        response = self.client.get(
            reverse(f"{prefix}memory-download", **kwargs), {"format": "json"}
        )
        validate(response.json(), load_schema("weblate-memory.schema.json"))

        # Test wipe
        count = Memory.objects.count()
        response = self.client.post(
            reverse(f"{prefix}memory-delete", **kwargs),
            {"confirm": "1", "origin": "invalid"},
            follow=True,
        )
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Entries deleted")
            self.assertEqual(count, Memory.objects.count())
            response = self.client.post(
                reverse(f"{prefix}memory-delete", **kwargs),
                {"confirm": "1"},
                follow=True,
            )
            self.assertContains(response, "Entries deleted")
            self.assertGreater(count, Memory.objects.count())

        # Test invalid upload
        response = self.upload_file("cs.json", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Failed to parse JSON file")

        # Test invalid upload
        response = self.upload_file("memory-broken.json", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Failed to parse JSON file")

        # Test invalid upload
        response = self.upload_file("memory-invalid.json", **kwargs)
        if fail:
            self.assertContains(response, "Permission Denied", status_code=403)
        else:
            self.assertContains(response, "Failed to parse JSON file")
예제 #11
0
def test_load():
    """Test schema loading."""
    schema = load_schema("weblate-memory.schema.json")
    assert isinstance(schema, dict)
예제 #12
0
def test_memory():
    """Test memory schema being valid."""
    validate([], load_schema("weblate-memory.schema.json"))