def test_delete_folders_recursively(self, mock_send_task_delete_document):
        # A
        # *  B
        # *  B2
        #       * C

        folder_a = setup_folder(self.org, name="A")
        folder_a_b = setup_folder(self.org, name="B", parent=folder_a)
        folder_a_b2 = setup_folder(self.org, name="B2", parent=folder_a)
        folder_a_b2_c = setup_folder(self.org, name="B2", parent=folder_a_b2)

        doc_folder_a = setup_document(self.org, self.user, ftl_folder=folder_a)
        doc_folder_a_b2 = setup_document(self.org, self.user, ftl_folder=folder_a_b2)
        doc_folder_a_b2_c = setup_document(
            self.org, self.user, ftl_folder=folder_a_b2_c
        )

        response = self.client.delete(f"/app/api/v1/folders/{folder_a.id}")

        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        doc_folder_a.refresh_from_db()
        doc_folder_a_b2.refresh_from_db()
        doc_folder_a_b2_c.refresh_from_db()

        self.assertTrue(doc_folder_a.deleted)
        self.assertTrue(doc_folder_a_b2.deleted)
        self.assertTrue(doc_folder_a_b2_c.deleted)
Example #2
0
    def test_delete_folders(self, mock_send_task_delete_document):
        org = setup_org()
        setup_admin(org)
        user = setup_user(org)
        folder = setup_folder(org)
        folder_sub = setup_folder(org, parent=folder)
        document_1 = setup_document(org,
                                    user,
                                    binary=setup_temporary_file().name)
        document_2 = setup_document(org,
                                    user,
                                    folder,
                                    binary=setup_temporary_file().name)
        document_3 = setup_document(org,
                                    user,
                                    folder_sub,
                                    binary=setup_temporary_file().name)

        self.assertEqual(FTLDocument.objects.filter(deleted=False).count(), 3)
        self.assertEqual(FTLFolder.objects.count(), 2)

        folder.delete()

        self.assertEqual(FTLDocument.objects.filter(deleted=False).count(), 1)
        self.assertEqual(FTLFolder.objects.count(), 0)

        self.assertIsNotNone(FTLDocument.objects.get(pid=document_1.pid))

        doc_marked_as_deleted_2 = FTLDocument.objects.get(pid=document_2.pid)
        self.assertTrue(doc_marked_as_deleted_2.deleted)

        doc_marked_as_deleted_3 = FTLDocument.objects.get(pid=document_3.pid)
        self.assertTrue(doc_marked_as_deleted_3.deleted)
    def setUp(self):
        self.org_with_docs = setup_org()
        setup_admin(self.org_with_docs)
        self.user = setup_user(self.org_with_docs)

        self.doc = setup_document(self.org_with_docs, self.user)
        self.doc_bis = setup_document(self.org_with_docs,
                                      self.user,
                                      title=tv.DOCUMENT2_TITLE)

        self.first_level_folder = setup_folder(self.org_with_docs,
                                               name="First level folder")

        self.doc_in_folder = setup_document(
            self.org_with_docs,
            self.user,
            title="Document in folder",
            ftl_folder=self.first_level_folder,
        )

        self.org_with_folders = setup_org(name=tv.ORG_NAME_2,
                                          slug=tv.ORG_SLUG_2)
        setup_folder(self.org_with_folders)

        self.org_without_docs_1 = setup_org(name=tv.ORG_NAME_3,
                                            slug=tv.ORG_SLUG_3)
        self.org_without_docs_2 = setup_org(name=tv.ORG_NAME_4,
                                            slug=tv.ORG_SLUG_4)
    def setUp(self):
        self.org = setup_org()
        setup_admin(self.org)
        self.user = setup_user(self.org)

        self.folder_root = setup_folder(self.org, name="First level folder")

        self.folder_root_subfolder = setup_folder(
            self.org, name="Second level folder", parent=self.folder_root
        )

        self.client.login(
            request=HttpRequest(), email=tv.USER1_EMAIL, password=tv.USER1_PASS
        )
    def setUp(self):
        self.org = setup_org()
        setup_admin(self.org)
        self.user = setup_user(self.org)

        self.doc = setup_document(
            self.org,
            self.user,
            title=tv.DOCUMENT_DOCX_TITLE,
            note=tv.DOCUMENT_DOCX_NOTE,
            text_content=tv.DOCUMENT_DOCX_CONTENT,
            binary=tv.DOCUMENT_DOCX_BINARY_PATH,
            file_type=
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        )

        self.first_level_folder = setup_folder(self.org,
                                               name="First level folder")

        self.doc_in_folder = setup_document(
            self.org,
            self.user,
            title="Document in folder",
            ftl_folder=self.first_level_folder,
        )

        self.client.login(request=HttpRequest(),
                          email=tv.USER1_EMAIL,
                          password=tv.USER1_PASS)
 def setUp(self, **kwargs):
     # first org, admin, user are already created, user is already logged on home page
     super().setUp()
     self.org = setup_org()
     setup_admin(self.org)
     self.user = setup_user(self.org)
     self.folder = setup_folder(self.org)
     self.visit(LoginPage.url)
     self.log_user()
    def test_delete_folder(self):
        folder_to_be_delete = setup_folder(self.org, name="Folder to delete")

        client_delete = self.client.delete(
            f"/app/api/v1/folders/{folder_to_be_delete.id}"
        )

        self.assertEqual(client_delete.status_code, status.HTTP_204_NO_CONTENT)

        with self.assertRaises(core.models.FTLFolder.DoesNotExist):
            FTLFolder.objects.get(id=folder_to_be_delete.id)
    def setUp(self):
        self.org = setup_org("To delete A", "to-delete-a")
        self.user_a = setup_admin(self.org, "*****@*****.**", "aaa")
        self.folder = setup_folder(self.org, "Folder 1")
        self.doc = setup_document(self.org, self.user_a, self.folder, title="Doc 1")
        self.devices = setup_2fa_static_device(
            self.user_a, codes_list=["AA1222", "BB1222"]
        )

        self.org_no_delete = setup_org("Not delete A", "not-delete-a")
        self.user_no_delete_a = setup_admin(
            self.org_no_delete, "*****@*****.**", "bbb"
        )
        self.folder_no_delete = setup_folder(self.org_no_delete, "Folder 1 no delete")
        self.doc_no_delete = setup_document(
            self.org_no_delete,
            self.user_no_delete_a,
            self.folder_no_delete,
            title="Doc 1 no delete",
        )
        self.devices_no_delete = setup_2fa_static_device(
            self.user_no_delete_a, codes_list=["AA1222", "BB1222"]
        )
    def test_create_same_folder_name_at_same_level(self):
        # Specific test for an issue where a sub folder at the same level but not the same parent can be created
        # A
        # *  X
        # B
        # *  X

        folder_a = setup_folder(self.org, name="A")
        folder_a_x = setup_folder(self.org, name="X", parent=folder_a)
        folder_b = setup_folder(self.org, name="B")

        # A `X` folders can be created below `B`
        response = self.client.post(
            "/app/api/v1/folders", {"name": "X", "parent": folder_b.id}, format="json"
        )

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        # But not created below `A`
        response = self.client.post(
            "/app/api/v1/folders", {"name": "X", "parent": folder_a.id}, format="json"
        )

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
    def setUp(self):
        self.org = setup_org()
        setup_admin(self.org)
        self.user = setup_user(self.org)

        self.doc = setup_document(self.org, self.user)
        self.doc_bis = setup_document(self.org, self.user, title=tv.DOCUMENT2_TITLE)

        self.first_level_folder = setup_folder(self.org, name="First level folder")

        self.doc_in_folder = setup_document(
            self.org,
            self.user,
            title="Document in folder",
            ftl_folder=self.first_level_folder,
        )

        self.client.login(
            request=HttpRequest(), email=tv.USER1_EMAIL, password=tv.USER1_PASS
        )
    def setUp(self, **kwargs):
        # orgs, admin, users are already created
        super().setUp()
        self.admin_org = setup_org(name="admin-org", slug="admin-org")
        self.admin = setup_admin(self.admin_org)
        self.user1_org = setup_org(name=tv.ORG_NAME_1, slug=tv.ORG_SLUG_1)
        self.user1 = setup_user(self.user1_org,
                                email=tv.USER1_EMAIL,
                                password=tv.USER1_PASS)
        self.user2_org = setup_org(name=tv.ORG_NAME_2, slug=tv.ORG_SLUG_2)
        self.user2 = setup_user(self.user2_org,
                                email=tv.USER2_EMAIL,
                                password=tv.USER2_PASS)

        # mock OTPMiddleware._verify_user() to skip check page
        self.middleware_patcher = patch.object(OTPMiddleware, "_verify_user",
                                               mocked_verify_user)
        self.middleware_patcher.start()
        self.addCleanup(
            patch.stopall
        )  # ensure mock is remove after each test, even if the test crash
        self.addCleanup(totp_time_setter.reset_mock, side_effect=True)

        # admin, user1 and user2 have added documents, folders, otp devices
        self.admin_resources = {}
        self.admin_resources["folder1"] = setup_folder(self.admin_org)
        self.admin_resources["sub_folder1"] = setup_folder(
            self.admin_org, parent=self.admin_resources["folder1"])
        self.admin_resources["doc1"] = setup_document(
            self.admin_org,
            ftl_user=self.admin,
            binary=setup_temporary_file().name)
        self.admin_resources["doc2"] = setup_document(
            self.admin_org,
            ftl_user=self.admin,
            ftl_folder=self.admin_resources["folder1"],
            binary=setup_temporary_file().name,
        )
        self.admin_resources["doc3"] = setup_document(
            self.admin_org,
            ftl_user=self.admin,
            ftl_folder=self.admin_resources["sub_folder1"],
            binary=setup_temporary_file().name,
        )
        self.admin_resources["totp_device"] = setup_2fa_totp_device(
            self.admin, secret_key=TOTP_DEVICE_SECRET_KEY)
        self.admin_resources["fido2_device"] = setup_2fa_fido2_device(
            self.admin)
        self.admin_resources["static_device"] = setup_2fa_static_device(
            self.admin, codes_list=["AAA"])

        self.user1_resources = {}
        self.user1_resources["folder1"] = setup_folder(self.user1_org)
        self.user1_resources["sub_folder1"] = setup_folder(
            self.user1_org, parent=self.user1_resources["folder1"])
        self.user1_resources["doc1"] = setup_document(
            self.user1_org,
            ftl_user=self.user1,
            binary=setup_temporary_file().name)
        self.user1_resources["doc2"] = setup_document(
            self.user1_org,
            ftl_user=self.user1,
            ftl_folder=self.user1_resources["folder1"],
            binary=setup_temporary_file().name,
        )
        self.user1_resources["doc3"] = setup_document(
            self.user1_org,
            ftl_user=self.user1,
            ftl_folder=self.user1_resources["sub_folder1"],
            binary=setup_temporary_file().name,
        )
        self.user1_resources["totp_device"] = setup_2fa_totp_device(
            self.user1, secret_key=TOTP_DEVICE_SECRET_KEY)
        self.user1_resources["fido2_device"] = setup_2fa_fido2_device(
            self.user1)
        self.user1_resources["static_device"] = setup_2fa_static_device(
            self.user1, codes_list=["AAA"])

        self.user2_resources = {}
        self.user2_resources["folder1"] = setup_folder(self.user2_org)
        self.user2_resources["sub_folder1"] = setup_folder(
            self.user2_org, parent=self.user2_resources["folder1"])
        self.user2_resources["doc1"] = setup_document(self.user2_org,
                                                      ftl_user=self.user2)
        self.user2_resources["doc2"] = setup_document(
            self.user2_org,
            ftl_user=self.user2,
            ftl_folder=self.user2_resources["folder1"],
        )
        self.user2_resources["doc3"] = setup_document(
            self.user2_org,
            ftl_user=self.user2,
            ftl_folder=self.user2_resources["sub_folder1"],
        )
        self.user2_resources["totp_device"] = setup_2fa_totp_device(
            self.user2, secret_key=TOTP_DEVICE_SECRET_KEY)
        self.user2_resources["fido2_device"] = setup_2fa_fido2_device(
            self.user2)
        self.user2_resources["static_device"] = setup_2fa_static_device(
            self.user2, codes_list=["AAA"])