예제 #1
0
def createDir(request, user, parentdirid=0, directoryname=""):
    """Erstellt einen neuen Ordner im angegebenen Verzeichnis.

    :param request: Anfrage des Clients, wird unverändert zurückgesendet
    :param user: User Objekt (eingeloggter Benutzer)
    :param parentdirid: Id des übergeordneten Ordners
    :param directoryname: Name des zu erstellenden Ordners
    :return: HttpResponse (JSON)
    """

    # hole das übergeordnete Ordner Objekt
    parentdirobj = Folder.objects.get(id=parentdirid)

    # Teste ob Ordnername in diesem Verzeichnis bereits existiert
    unique, failurereturn = util.checkIfFileOrFolderIsUnique(
        directoryname, Folder, parentdirobj, request)
    if not unique:
        return failurereturn

    # Versuche den Ordner in der Datenbank zu speichern
    try:
        newfolder = Folder(name=directoryname,
                           parent=parentdirobj,
                           root=parentdirobj.getRoot())
        newfolder.save()
        return util.jsonResponse(
            {
                'id': newfolder.id,
                'name': newfolder.name,
                'parentid': parentdirobj.id,
                'parentname': parentdirobj.name
            }, True, request)
    except:
        return util.jsonErrorResponse(ERROR_MESSAGES['DATABASEERROR'], request)
예제 #2
0
def createDir(request, user, parentdirid=0, directoryname=""):
    """Erstellt einen neuen Ordner im angegebenen Verzeichnis.

    :param request: Anfrage des Clients, wird unverändert zurückgesendet
    :param user: User Objekt (eingeloggter Benutzer)
    :param parentdirid: Id des übergeordneten Ordners
    :param directoryname: Name des zu erstellenden Ordners
    :return: HttpResponse (JSON)
    """

    # hole das übergeordnete Ordner Objekt
    parentdirobj = Folder.objects.get(id=parentdirid)

    # Teste ob Ordnername in diesem Verzeichnis bereits existiert
    unique, failurereturn = util.checkIfFileOrFolderIsUnique(directoryname, Folder, parentdirobj, request)
    if not unique:
        return failurereturn

    # Versuche den Ordner in der Datenbank zu speichern
    try:
        newfolder = Folder(name=directoryname, parent=parentdirobj, root=parentdirobj.getRoot())
        newfolder.save()
        return util.jsonResponse({'id': newfolder.id, 'name': newfolder.name, 'parentid': parentdirobj.id,
                                  'parentname': parentdirobj.name}, True, request)
    except:
        return util.jsonErrorResponse(ERROR_MESSAGES['DATABASEERROR'], request)
예제 #3
0
def main_menu():
    if not authenticated(session):
        abort(403)
    else:
        conn = connection()
        folders = Folder.find_by_id_user(conn, session['user']['id'])
        return render_template("user/menu.html", folders=folders)
예제 #4
0
def create():
    if not authenticated(session):
        abort(403)
    else:
        folder_name = request.form.get("folder_name")
        if (folder_name == None) or (folder_name == ""):
            flash("The folder must have a name!", category="error")
            return redirect(url_for("user-main-menu"))
        conn = connection()
        if (Folder.exists(conn, session['user']['id'], folder_name)):
            flash("The folder already exists!", category="error")
        else:
            try:
                Folder.create(conn, session['user']['id'], folder_name)
                flash("The folder was created!", category="success")
            except:
                flash("There was an error", category="error")
        return redirect(url_for("user-main-menu"))
예제 #5
0
def delete():
    if not authenticated(session):
        abort(403)
    else:
        id_folder = request.form.get("id_folder")
        if (id_folder == None) or (id_folder == ""):
            flash("The folder must have an ID!", category="error")
            return redirect(url_for("user-main-menu"))

        conn = connection()
        folder = Folder.find_by_id(conn, id_folder)
        if not folder:
            flash("The folder doesn't exist!", category="error")
        else:
            if folder['id_user'] == session['user']['id']:
                try:
                    Folder.delete(conn, session['user']['id'], id_folder)
                    flash("The folder was deleted!", category="success")
                except:
                    flash("There was an error!", category="error")
            else:
                flash("You don't have access to that folder!",
                      category="error")
        return redirect(url_for("user-main-menu"))
예제 #6
0
def show():
    if not authenticated(session):
        abort(403)
    else:
        id_folder = request.args.get("id_folder")
        if(id_folder == None) or (id_folder == ""):
            flash("The 'id' field is empty!", category="error")
            return redirect(request.referrer)
        conn = connection()        
        if User.has_permision_to_open_folder(conn, session['user']['id'], id_folder):
            folder = Folder.find_by_id(conn, id_folder)
            if not folder:
                flash("The folder doesn't exist!", category="error")
                return redirect(request.referrer)
            else:
                tasks = Task.find_by_id_folder(conn, folder['id'])
                return render_template("folder/folder-show.html", folder=folder, tasks=tasks)
        else:
            flash("You don't have permission to access that folder!", category="error")
            return redirect(request.referrer)
예제 #7
0
def login():
    username = request.form.get("username")
    password = request.form.get("password")
    if (username == None) or (username == ""):
        flash("The field 'username' is empty!", category="error")
        return redirect(request.referrer)
    if (password == None) or (password == ""):
        flash("The field 'password' is empty!", category="error")
        return redirect(request.referrer)

    conn = connection()
    user = User.find_by_username(conn, username)
    if not user:
        flash("The username doesn't exist!", category="error")
        return redirect(request.referrer)
    else:
        if password == user["password"]:
            flash("You have successfully logged in!", category="success")
            session["user"] = user
            folders = Folder.find_by_id_user(conn, user['id'])
            return render_template("user/menu.html", folders=folders)
        else:
            flash("Invalid password", category="error")
            return redirect(request.referrer)
예제 #8
0
class ViewTestCase(TestCase):
    """ Klasse für Test Methoden der einzelnen Views.

    """

    testfiles_root = os.path.join(settings.BASE_DIR, 'app', 'tests', 'server',
                                  'static')

    def setUpUserAndProjects(self):
        """Erstellt Benutzer und Projekte für die Tests.

        Es werden 3 Benutzer erstellt:
        - user1 hat 3 Projekte und 2 Vorlagen
        - user2 hat 2 Projekte
        - user3 hat keine Projekte

        :return: None
        """

        # erstelle user1
        self._user1 = User.objects.create_user('*****@*****.**',
                                               '*****@*****.**',
                                               password='******')
        self._user1._unhashedpw = '123456'

        # erstelle user2
        self._user2 = User.objects.create_user('*****@*****.**',
                                               '*****@*****.**',
                                               password='******')
        self._user2._unhashedpw = 'test123'

        # erstelle user3
        self._user3 = User.objects.create_user('*****@*****.**',
                                               '*****@*****.**',
                                               password='******')
        self._user3._unhashedpw = 'test123'

        # logge user1 ein
        self.client.login(username=self._user1.username,
                          password=self._user1._unhashedpw)

        # erstelle ein Projekt als user1
        self._user1_project1 = Project.objects.createWithMainTex(
            name='user1_project1', author=self._user1)
        self._user1_project2 = Project.objects.createWithMainTex(
            name='user1_project2', author=self._user1)
        self._user1_project3 = Project.objects.createWithMainTex(
            name='user1_project3', author=self._user1)
        self._user1_project4 = Project.objects.createWithMainTex(
            name=u'Übungsprojekt 01', author=self._user1)

        # erstelle eine Vorlage als user1
        self._user1_template1 = ProjectTemplate.objects.create(
            name='user1_template1', author=self._user1)
        self._user1_template2 = ProjectTemplate.objects.create(
            name='user1_template2', author=self._user1)
        self._user1_template3 = ProjectTemplate.objects.create(
            name=u'user1_template2´3', author=self._user1)

        # erstelle ein Projekt als user2
        self._user2_project1 = Project.objects.createWithMainTex(
            name='user2_project1', author=self._user2)
        self._user2_project2 = Project.objects.createWithMainTex(
            name='user2_project2', author=self._user2)
        self._user2_template1 = ProjectTemplate.objects.create(
            name='user2_template1', author=self._user2)

    def setUpCollaborations(self):
        self._user2_sharedproject = Project.objects.createWithMainTex(
            name='user2_sharedproject', author=self._user2)
        self._user2_sharedproject_folder1 = Folder.objects.create(
            name='user2_sharedproject_folder1',
            parent=self._user2_sharedproject.rootFolder,
            root=self._user2_sharedproject.rootFolder)
        self._user2_sharedproject_folder2 = Folder.objects.create(
            name='user2_sharedproject_folder2',
            parent=self._user2_sharedproject.rootFolder,
            root=self._user2_sharedproject.rootFolder)

        maintex = self._user2_sharedproject.rootFolder.getMainTex()
        maintex.source_code = 'Hallo!'
        maintex.save()

        self._user2_sharedproject_folder1_texfile = TexFile(
            name='temp.tex',
            folder=self._user2_sharedproject_folder1,
            source_code='invalidtex source code')

        Collaboration.objects.create(user=self._user1,
                                     project=self._user2_sharedproject,
                                     isConfirmed=True)

    def setUpSingleUser(self):
        """Erstellt einen einzelnen Benutzer und loggt diesen ein.

        :return: None
        """

        # erstelle user1
        self._user1 = User.objects.create_user('*****@*****.**',
                                               '*****@*****.**',
                                               password='******')
        self._user1._unhashedpw = '123456'

        # logge user1 ein
        self.client.login(username=self._user1.username,
                          password=self._user1._unhashedpw)

    def setUpFolders(self):
        """Erstellt mehrere Ordner in den Projekten von user1 und user2.

        Es werden folgende Ordner erstellt:
        user1_project1/folder1
        user1_project1/folder2
        user1_project1/folder2/subfolder1

        user2_project1/folder1
        user2_project1/folder1/subfolder1

        :return: None
        """

        # erstelle zwei Order für user1, die dem Projekt user1_project1 zugewiesen werden
        # erstelle einen Unterordner in _user1_project1_folder2
        self._user1_project1_folder1 = Folder(
            name='user1_project1_folder1',
            parent=self._user1_project1.rootFolder,
            root=self._user1_project1.rootFolder)
        self._user1_project1_folder1.save()
        self._user1_project1_folder2 = Folder(
            name='user1_project1_folder2',
            parent=self._user1_project1.rootFolder,
            root=self._user1_project1.rootFolder)
        self._user1_project1_folder2.save()
        self._user1_project1_folder2_subfolder1 = Folder(
            name='user1_project1_folder2_subfolder1',
            parent=self._user1_project1_folder2,
            root=self._user1_project1.rootFolder)
        self._user1_project1_folder2_subfolder1.save()

        # erstelle zwei Order für user1, die dem Projekt user1_project4 zugewiesen werden
        self._user1_project4_folder1 = Folder(
            name=u'Übung 01',
            parent=self._user1_project4.rootFolder,
            root=self._user1_project4.rootFolder)
        self._user1_project4_folder1.save()
        self._user1_project4_folder2 = Folder(
            name=u'Übung 02',
            parent=self._user1_project4_folder1,
            root=self._user1_project4.rootFolder)
        self._user1_project4_folder2.save()
        self._user1_project4_folder3 = Folder(
            name=u'übung 02',
            parent=self._user1_project4.rootFolder,
            root=self._user1_project4.rootFolder)
        self._user1_project4_folder3.save()

        # erstelle zwei Order für user1, die der Vorlage user1_template1 zugewiesen werden
        # erstelle einen Unterordner in _user1_template1_folder2
        self._user1_template1_folder1 = Folder(
            name='user1_template1_folder1',
            parent=self._user1_template1.rootFolder,
            root=self._user1_template1.rootFolder)
        self._user1_template1_folder1.save()
        self._user1_template1_folder2 = Folder(
            name='user1_template1_folder2',
            parent=self._user1_template1.rootFolder,
            root=self._user1_template1.rootFolder)
        self._user1_template1_folder2.save()
        self._user1_template1_folder2_subfolder1 = Folder(
            name='user1_template1_folder2_subfolder1',
            parent=self._user1_template1_folder2,
            root=self._user1_template1.rootFolder)
        self._user1_template1_folder2_subfolder1.save()

        # erstelle einen Order für user2, die dem Projekt user2_project1 zugewiesen werden
        # erstelle einen Unterordner in _user2_project1_folder1
        self._user2_project1_folder1 = Folder(
            name='user2_project1_folder1',
            parent=self._user2_project1.rootFolder,
            root=self._user2_project1.rootFolder)
        self._user2_project1_folder1.save()
        self._user2_project1_folder1_subfolder1 = Folder(
            name='user2_project1_folder1_subfolder1',
            parent=self._user2_project1_folder1,
            root=self._user1_project1.rootFolder)
        self._user2_project1_folder1_subfolder1.save()

    def setUpFiles(self):
        """Lädt mehrere Testdateien und speichert diese in der Datenbank.

        Es werden folgende Dateien erstellt:
        - user1: tex1 in project1_rootFolder (main.tex, es wird der sourc_code geändert)
        - user1: tex2 in project1_rootFolder
        - user1: tex3 in project1_rootFolder/folder1
        - user1 : tex4

        :return: None
        """

        # Dateinamen der verwendeten Testdateien
        texfile1_name = 'test_tex_presentation.tex'
        texfile2_name = 'test_tex_simple.tex'
        texfile3_name = 'test_tex_images.tex'
        texfile4_name = 'test_tex_simple.tex'
        texfile5_name = 'test_tex_simple.tex'
        binfile1_name = 'test_bin.bin'
        binfile2_name = 'test_jpg.jpg'
        binfile3_name = 'test_png.png'
        zipfile1_name = u'test_utf8_Übung.zip'

        texfile1_name_specialchars = u'Übungsblatt01.tex'
        texfile2_name_specialchars = u'Übungsblatt02.tex'

        # Pfad für die zip
        self._zipfile1_path = os.path.join(self.testfiles_root, zipfile1_name)

        # Ändere den Source Code der main.tex Datei von user1_project1
        self._user1_tex1 = self._user1_project1.rootFolder.getMainTex()
        texfile1 = open(os.path.join(self.testfiles_root, texfile1_name), 'r')
        self._user1_tex1_source_code = texfile1.read()
        self._user1_tex1.source_code = self._user1_tex1_source_code
        self._user1_tex1.save()

        # Erstelle eine .tex Datei für user1 in user1_project1_root (Projekt root Verzeichnis)
        texfile2 = open(os.path.join(self.testfiles_root, texfile2_name), 'r')
        self._user1_tex2_source_code = texfile2.read()
        self._user1_tex2 = TexFile(name=texfile2_name,
                                   folder=self._user1_project1.rootFolder,
                                   source_code=self._user1_tex2_source_code)
        self._user1_tex2.save()

        # Erstelle eine .tex Datei für user1 in user1_project1_folder1
        texfile3 = open(os.path.join(self.testfiles_root, texfile3_name), 'r')
        self._user1_tex3_source_code = texfile3.read()
        self._user1_tex3 = TexFile(name=texfile3_name,
                                   folder=self._user1_project1_folder1,
                                   source_code=self._user1_tex3_source_code)
        self._user1_tex3.save()

        # Erstelle eine .tex Datei für user1 in user1_project1_folder1
        self._user1_tex4 = TexFile(name=texfile2_name,
                                   folder=self._user1_project1_folder1,
                                   source_code='invalidtex source code')
        self._user1_tex4.save()

        # Erstelle eine .tex Datei für user1 in user1_project4_folder1
        texfile3.seek(0)
        self._user1_tex5_source_code = texfile3.read()
        self._user1_tex5 = TexFile(name=texfile1_name_specialchars,
                                   folder=self._user1_project4_folder1,
                                   source_code=self._user1_tex3_source_code)
        self._user1_tex5.save()

        # Erstelle eine .tex Datei für user1 in user1_project4_folder1
        texfile3.seek(0)
        self._user1_tex6_source_code = texfile3.read()
        self._user1_tex6 = TexFile(name=texfile2_name_specialchars,
                                   folder=self._user1_project4_folder1,
                                   source_code=self._user1_tex3_source_code)
        self._user1_tex6.save()

        # Erstelle eine Binärdatei für user1 in user1_project1_folder2_subfolder1
        self._user1_binfile1_path = os.path.join(self.testfiles_root,
                                                 binfile1_name)
        binfile1 = open(self._user1_binfile1_path, 'rb')
        self._user1_binary1 = BinaryFile.objects.createFromFile(
            name=binfile1_name,
            folder=self._user1_project1_folder2_subfolder1,
            file=binfile1)
        binfile1.close()

        # Ändere den Source Code der main.tex Datei von user2_project1
        self._user2_tex1 = self._user2_project1.rootFolder.getMainTex()
        texfile2 = open(os.path.join(self.testfiles_root, texfile2_name), 'r')
        self._user2_tex1.source_code = texfile2.read()
        self._user2_tex1.save()

        # Erstelle eine jpg Bilddatei für user1 in user1_project1_folder2_subfolder1
        self._user1_binary2_path = os.path.join(self.testfiles_root,
                                                binfile2_name)
        binfile2 = open(self._user1_binary2_path, 'rb')
        self._user1_binary2 = BinaryFile.objects.createFromFile(
            name=binfile2_name,
            folder=self._user1_project1_folder2_subfolder1,
            file=binfile2)
        binfile2.close()

        # Erstelle eine png Bilddatei für user1 in user1_project1_folder2_subfolder2
        self._user1_binary3_path = os.path.join(self.testfiles_root,
                                                binfile3_name)
        binfile3 = open(self._user1_binary3_path, 'rb')
        self._user1_binary3 = BinaryFile.objects.createFromFile(
            name=binfile3_name,
            folder=self._user1_project1_folder2_subfolder1,
            file=binfile3)
        binfile3.close()

    # setzt einige Variablen, die in den Tests verwendet werden können
    def setUpValues(self):
        texfile_name = 'test_tex_simple.tex'
        texfile = open(os.path.join(self.testfiles_root, texfile_name), 'r')
        self._new_code1 = texfile.read()
        texfile.close()
        self._newtex_name1 = 'NeuerTexName1.tex'
        self._newtex_name2 = 'NeuerTexName2.tex'
        self._newtex_name3 = 'NeuerTexName3.tex'
        self._newtex_name_only_ext = '.tex'
        self._newtex_name_specialchars1 = u'übungsblatt 01.tex'
        self._newtex_name_specialchars2 = u'übungsblatt 02.tex'
        self._newbinary_name1 = 'NeuerBinaryName1.bin'
        self._newbinary_name2 = 'NeuerBinaryName2.bin'
        self._newbinary_name3 = 'NeuerBinaryName3.bin'
        self._newname1 = 'NeuerName1'
        self._newname2 = 'NeuerName2'
        self._newname3 = 'NeuerName3'
        self._newname4 = 'NeuerName4'
        self._newname5 = 'NeuerName5'
        self._invalidid = 100000000
        self._name_only_spaces = '    '
        self._name_blank = ''
        self._name_invalid_chars = 'Test1234<>\\/'
        self._name_no_ext = 'filename'
        self._name_only_ext = '.tex'

    # löscht den Ordner für die test Dateien
    def tearDownFiles(self):
        if os.path.isdir(settings.MEDIA_ROOT):
            shutil.rmtree(settings.MEDIA_ROOT)
예제 #9
0
    def setUpFolders(self):
        """Erstellt mehrere Ordner in den Projekten von user1 und user2.

        Es werden folgende Ordner erstellt:
        user1_project1/folder1
        user1_project1/folder2
        user1_project1/folder2/subfolder1

        user2_project1/folder1
        user2_project1/folder1/subfolder1

        :return: None
        """

        # erstelle zwei Order für user1, die dem Projekt user1_project1 zugewiesen werden
        # erstelle einen Unterordner in _user1_project1_folder2
        self._user1_project1_folder1 = Folder(
            name='user1_project1_folder1',
            parent=self._user1_project1.rootFolder,
            root=self._user1_project1.rootFolder)
        self._user1_project1_folder1.save()
        self._user1_project1_folder2 = Folder(
            name='user1_project1_folder2',
            parent=self._user1_project1.rootFolder,
            root=self._user1_project1.rootFolder)
        self._user1_project1_folder2.save()
        self._user1_project1_folder2_subfolder1 = Folder(
            name='user1_project1_folder2_subfolder1',
            parent=self._user1_project1_folder2,
            root=self._user1_project1.rootFolder)
        self._user1_project1_folder2_subfolder1.save()

        # erstelle zwei Order für user1, die dem Projekt user1_project4 zugewiesen werden
        self._user1_project4_folder1 = Folder(
            name=u'Übung 01',
            parent=self._user1_project4.rootFolder,
            root=self._user1_project4.rootFolder)
        self._user1_project4_folder1.save()
        self._user1_project4_folder2 = Folder(
            name=u'Übung 02',
            parent=self._user1_project4_folder1,
            root=self._user1_project4.rootFolder)
        self._user1_project4_folder2.save()
        self._user1_project4_folder3 = Folder(
            name=u'übung 02',
            parent=self._user1_project4.rootFolder,
            root=self._user1_project4.rootFolder)
        self._user1_project4_folder3.save()

        # erstelle zwei Order für user1, die der Vorlage user1_template1 zugewiesen werden
        # erstelle einen Unterordner in _user1_template1_folder2
        self._user1_template1_folder1 = Folder(
            name='user1_template1_folder1',
            parent=self._user1_template1.rootFolder,
            root=self._user1_template1.rootFolder)
        self._user1_template1_folder1.save()
        self._user1_template1_folder2 = Folder(
            name='user1_template1_folder2',
            parent=self._user1_template1.rootFolder,
            root=self._user1_template1.rootFolder)
        self._user1_template1_folder2.save()
        self._user1_template1_folder2_subfolder1 = Folder(
            name='user1_template1_folder2_subfolder1',
            parent=self._user1_template1_folder2,
            root=self._user1_template1.rootFolder)
        self._user1_template1_folder2_subfolder1.save()

        # erstelle einen Order für user2, die dem Projekt user2_project1 zugewiesen werden
        # erstelle einen Unterordner in _user2_project1_folder1
        self._user2_project1_folder1 = Folder(
            name='user2_project1_folder1',
            parent=self._user2_project1.rootFolder,
            root=self._user2_project1.rootFolder)
        self._user2_project1_folder1.save()
        self._user2_project1_folder1_subfolder1 = Folder(
            name='user2_project1_folder1_subfolder1',
            parent=self._user2_project1_folder1,
            root=self._user1_project1.rootFolder)
        self._user2_project1_folder1_subfolder1.save()
예제 #10
0
class ViewTestCase(TestCase):
    """ Klasse für Test Methoden der einzelnen Views.

    """

    testfiles_root = os.path.join(settings.BASE_DIR, 'app', 'tests', 'server', 'static')


    def setUpUserAndProjects(self):
        """Erstellt Benutzer und Projekte für die Tests.

        Es werden 3 Benutzer erstellt:
        - user1 hat 3 Projekte und 2 Vorlagen
        - user2 hat 2 Projekte
        - user3 hat keine Projekte

        :return: None
        """

        # erstelle user1
        self._user1 = User.objects.create_user('*****@*****.**', '*****@*****.**', password='******')
        self._user1._unhashedpw = '123456'

        # erstelle user2
        self._user2 = User.objects.create_user('*****@*****.**', '*****@*****.**', password='******')
        self._user2._unhashedpw = 'test123'

        # erstelle user3
        self._user3 = User.objects.create_user('*****@*****.**', '*****@*****.**', password='******')
        self._user3._unhashedpw = 'test123'

        # logge user1 ein
        self.client.login(username=self._user1.username, password=self._user1._unhashedpw)

        # erstelle ein Projekt als user1
        self._user1_project1 = Project.objects.createWithMainTex(name='user1_project1', author=self._user1)
        self._user1_project2 = Project.objects.createWithMainTex(name='user1_project2', author=self._user1)
        self._user1_project3 = Project.objects.createWithMainTex(name='user1_project3', author=self._user1)
        self._user1_project4 = Project.objects.createWithMainTex(name=u'Übungsprojekt 01', author=self._user1)

        # erstelle eine Vorlage als user1
        self._user1_template1 = ProjectTemplate.objects.create(name='user1_template1', author=self._user1)
        self._user1_template2 = ProjectTemplate.objects.create(name='user1_template2', author=self._user1)
        self._user1_template3 = ProjectTemplate.objects.create(name=u'user1_template2´3', author=self._user1)

        # erstelle ein Projekt als user2
        self._user2_project1 = Project.objects.createWithMainTex(name='user2_project1', author=self._user2)
        self._user2_project2 = Project.objects.createWithMainTex(name='user2_project2', author=self._user2)
        self._user2_template1 = ProjectTemplate.objects.create(name='user2_template1', author=self._user2)


    def setUpCollaborations(self):
        self._user2_sharedproject = Project.objects.createWithMainTex(name='user2_sharedproject', author=self._user2)
        self._user2_sharedproject_folder1 = Folder.objects.create(name='user2_sharedproject_folder1',
                                                                  parent=self._user2_sharedproject.rootFolder,
                                                                  root=self._user2_sharedproject.rootFolder)
        self._user2_sharedproject_folder2 = Folder.objects.create(name='user2_sharedproject_folder2',
                                                                  parent=self._user2_sharedproject.rootFolder,
                                                                  root=self._user2_sharedproject.rootFolder)

        maintex = self._user2_sharedproject.rootFolder.getMainTex()
        maintex.source_code = 'Hallo!'
        maintex.save()


        self._user2_sharedproject_folder1_texfile = TexFile(name='temp.tex', folder=self._user2_sharedproject_folder1,
                                                    source_code='invalidtex source code')


        Collaboration.objects.create(user=self._user1, project=self._user2_sharedproject, isConfirmed=True)


    def setUpSingleUser(self):
        """Erstellt einen einzelnen Benutzer und loggt diesen ein.

        :return: None
        """

        # erstelle user1
        self._user1 = User.objects.create_user('*****@*****.**', '*****@*****.**', password='******')
        self._user1._unhashedpw = '123456'

        # logge user1 ein
        self.client.login(username=self._user1.username, password=self._user1._unhashedpw)

    def setUpFolders(self):
        """Erstellt mehrere Ordner in den Projekten von user1 und user2.

        Es werden folgende Ordner erstellt:
        user1_project1/folder1
        user1_project1/folder2
        user1_project1/folder2/subfolder1

        user2_project1/folder1
        user2_project1/folder1/subfolder1

        :return: None
        """

        # erstelle zwei Order für user1, die dem Projekt user1_project1 zugewiesen werden
        # erstelle einen Unterordner in _user1_project1_folder2
        self._user1_project1_folder1 = Folder(name='user1_project1_folder1', parent=self._user1_project1.rootFolder,
                                              root=self._user1_project1.rootFolder)
        self._user1_project1_folder1.save()
        self._user1_project1_folder2 = Folder(name='user1_project1_folder2', parent=self._user1_project1.rootFolder,
                                              root=self._user1_project1.rootFolder)
        self._user1_project1_folder2.save()
        self._user1_project1_folder2_subfolder1 = Folder(name='user1_project1_folder2_subfolder1',
                                                         parent=self._user1_project1_folder2,
                                                         root=self._user1_project1.rootFolder)
        self._user1_project1_folder2_subfolder1.save()

        # erstelle zwei Order für user1, die dem Projekt user1_project4 zugewiesen werden
        self._user1_project4_folder1 = Folder(name=u'Übung 01', parent=self._user1_project4.rootFolder,
                                              root=self._user1_project4.rootFolder)
        self._user1_project4_folder1.save()
        self._user1_project4_folder2 = Folder(name=u'Übung 02', parent=self._user1_project4_folder1,
                                              root=self._user1_project4.rootFolder)
        self._user1_project4_folder2.save()
        self._user1_project4_folder3 = Folder(name=u'übung 02', parent=self._user1_project4.rootFolder,
                                              root=self._user1_project4.rootFolder)
        self._user1_project4_folder3.save()

        # erstelle zwei Order für user1, die der Vorlage user1_template1 zugewiesen werden
        # erstelle einen Unterordner in _user1_template1_folder2
        self._user1_template1_folder1 = Folder(name='user1_template1_folder1', parent=self._user1_template1.rootFolder,
                                               root=self._user1_template1.rootFolder)
        self._user1_template1_folder1.save()
        self._user1_template1_folder2 = Folder(name='user1_template1_folder2', parent=self._user1_template1.rootFolder,
                                               root=self._user1_template1.rootFolder)
        self._user1_template1_folder2.save()
        self._user1_template1_folder2_subfolder1 = Folder(name='user1_template1_folder2_subfolder1',
                                                          parent=self._user1_template1_folder2,
                                                          root=self._user1_template1.rootFolder)
        self._user1_template1_folder2_subfolder1.save()

        # erstelle einen Order für user2, die dem Projekt user2_project1 zugewiesen werden
        # erstelle einen Unterordner in _user2_project1_folder1
        self._user2_project1_folder1 = Folder(name='user2_project1_folder1', parent=self._user2_project1.rootFolder,
                                              root=self._user2_project1.rootFolder)
        self._user2_project1_folder1.save()
        self._user2_project1_folder1_subfolder1 = Folder(name='user2_project1_folder1_subfolder1',
                                                         parent=self._user2_project1_folder1,
                                                         root=self._user1_project1.rootFolder)
        self._user2_project1_folder1_subfolder1.save()


    def setUpFiles(self):
        """Lädt mehrere Testdateien und speichert diese in der Datenbank.

        Es werden folgende Dateien erstellt:
        - user1: tex1 in project1_rootFolder (main.tex, es wird der sourc_code geändert)
        - user1: tex2 in project1_rootFolder
        - user1: tex3 in project1_rootFolder/folder1
        - user1 : tex4

        :return: None
        """

        # Dateinamen der verwendeten Testdateien
        texfile1_name = 'test_tex_presentation.tex'
        texfile2_name = 'test_tex_simple.tex'
        texfile3_name = 'test_tex_images.tex'
        texfile4_name = 'test_tex_simple.tex'
        texfile5_name = 'test_tex_simple.tex'
        binfile1_name = 'test_bin.bin'
        binfile2_name = 'test_jpg.jpg'
        binfile3_name = 'test_png.png'
        zipfile1_name = u'test_utf8_Übung.zip'

        texfile1_name_specialchars = u'Übungsblatt01.tex'
        texfile2_name_specialchars = u'Übungsblatt02.tex'

        # Pfad für die zip
        self._zipfile1_path = os.path.join(self.testfiles_root, zipfile1_name)

        # Ändere den Source Code der main.tex Datei von user1_project1
        self._user1_tex1 = self._user1_project1.rootFolder.getMainTex()
        texfile1 = open(os.path.join(self.testfiles_root, texfile1_name), 'r')
        self._user1_tex1_source_code = texfile1.read()
        self._user1_tex1.source_code = self._user1_tex1_source_code
        self._user1_tex1.save()

        # Erstelle eine .tex Datei für user1 in user1_project1_root (Projekt root Verzeichnis)
        texfile2 = open(os.path.join(self.testfiles_root, texfile2_name), 'r')
        self._user1_tex2_source_code = texfile2.read()
        self._user1_tex2 = TexFile(name=texfile2_name, folder=self._user1_project1.rootFolder,
                                   source_code=self._user1_tex2_source_code)
        self._user1_tex2.save()

        # Erstelle eine .tex Datei für user1 in user1_project1_folder1
        texfile3 = open(os.path.join(self.testfiles_root, texfile3_name), 'r')
        self._user1_tex3_source_code = texfile3.read()
        self._user1_tex3 = TexFile(name=texfile3_name, folder=self._user1_project1_folder1,
                                   source_code=self._user1_tex3_source_code)
        self._user1_tex3.save()

        # Erstelle eine .tex Datei für user1 in user1_project1_folder1
        self._user1_tex4 = TexFile(name=texfile2_name, folder=self._user1_project1_folder1,
                                   source_code='invalidtex source code')
        self._user1_tex4.save()

        # Erstelle eine .tex Datei für user1 in user1_project4_folder1
        texfile3.seek(0)
        self._user1_tex5_source_code = texfile3.read()
        self._user1_tex5 = TexFile(name=texfile1_name_specialchars, folder=self._user1_project4_folder1,
                                   source_code=self._user1_tex3_source_code)
        self._user1_tex5.save()

        # Erstelle eine .tex Datei für user1 in user1_project4_folder1
        texfile3.seek(0)
        self._user1_tex6_source_code = texfile3.read()
        self._user1_tex6 = TexFile(name=texfile2_name_specialchars, folder=self._user1_project4_folder1,
                                   source_code=self._user1_tex3_source_code)
        self._user1_tex6.save()

        # Erstelle eine Binärdatei für user1 in user1_project1_folder2_subfolder1
        self._user1_binfile1_path = os.path.join(self.testfiles_root, binfile1_name)
        binfile1 = open(self._user1_binfile1_path, 'rb')
        self._user1_binary1 = BinaryFile.objects.createFromFile(name=binfile1_name,
                                                                folder=self._user1_project1_folder2_subfolder1,
                                                                file=binfile1)
        binfile1.close()

        # Ändere den Source Code der main.tex Datei von user2_project1
        self._user2_tex1 = self._user2_project1.rootFolder.getMainTex()
        texfile2 = open(os.path.join(self.testfiles_root, texfile2_name), 'r')
        self._user2_tex1.source_code = texfile2.read()
        self._user2_tex1.save()

        # Erstelle eine jpg Bilddatei für user1 in user1_project1_folder2_subfolder1
        self._user1_binary2_path = os.path.join(self.testfiles_root, binfile2_name)
        binfile2 = open(self._user1_binary2_path, 'rb')
        self._user1_binary2 = BinaryFile.objects.createFromFile(name=binfile2_name,
                                                                folder=self._user1_project1_folder2_subfolder1,
                                                                file=binfile2)
        binfile2.close()

        # Erstelle eine png Bilddatei für user1 in user1_project1_folder2_subfolder2
        self._user1_binary3_path = os.path.join(self.testfiles_root, binfile3_name)
        binfile3 = open(self._user1_binary3_path, 'rb')
        self._user1_binary3 = BinaryFile.objects.createFromFile(name=binfile3_name,
                                                                folder=self._user1_project1_folder2_subfolder1,
                                                                file=binfile3)
        binfile3.close()


    # setzt einige Variablen, die in den Tests verwendet werden können
    def setUpValues(self):
        texfile_name = 'test_tex_simple.tex'
        texfile = open(os.path.join(self.testfiles_root, texfile_name), 'r')
        self._new_code1 = texfile.read()
        texfile.close()
        self._newtex_name1 = 'NeuerTexName1.tex'
        self._newtex_name2 = 'NeuerTexName2.tex'
        self._newtex_name3 = 'NeuerTexName3.tex'
        self._newtex_name_only_ext = '.tex'
        self._newtex_name_specialchars1 = u'übungsblatt 01.tex'
        self._newtex_name_specialchars2 = u'übungsblatt 02.tex'
        self._newbinary_name1 = 'NeuerBinaryName1.bin'
        self._newbinary_name2 = 'NeuerBinaryName2.bin'
        self._newbinary_name3 = 'NeuerBinaryName3.bin'
        self._newname1 = 'NeuerName1'
        self._newname2 = 'NeuerName2'
        self._newname3 = 'NeuerName3'
        self._newname4 = 'NeuerName4'
        self._newname5 = 'NeuerName5'
        self._invalidid = 100000000
        self._name_only_spaces = '    '
        self._name_blank = ''
        self._name_invalid_chars = 'Test1234<>\\/'
        self._name_no_ext = 'filename'
        self._name_only_ext = '.tex'


    # löscht den Ordner für die test Dateien
    def tearDownFiles(self):
        if os.path.isdir(settings.MEDIA_ROOT):
            shutil.rmtree(settings.MEDIA_ROOT)
예제 #11
0
    def setUpFolders(self):
        """Erstellt mehrere Ordner in den Projekten von user1 und user2.

        Es werden folgende Ordner erstellt:
        user1_project1/folder1
        user1_project1/folder2
        user1_project1/folder2/subfolder1

        user2_project1/folder1
        user2_project1/folder1/subfolder1

        :return: None
        """

        # erstelle zwei Order für user1, die dem Projekt user1_project1 zugewiesen werden
        # erstelle einen Unterordner in _user1_project1_folder2
        self._user1_project1_folder1 = Folder(name='user1_project1_folder1', parent=self._user1_project1.rootFolder,
                                              root=self._user1_project1.rootFolder)
        self._user1_project1_folder1.save()
        self._user1_project1_folder2 = Folder(name='user1_project1_folder2', parent=self._user1_project1.rootFolder,
                                              root=self._user1_project1.rootFolder)
        self._user1_project1_folder2.save()
        self._user1_project1_folder2_subfolder1 = Folder(name='user1_project1_folder2_subfolder1',
                                                         parent=self._user1_project1_folder2,
                                                         root=self._user1_project1.rootFolder)
        self._user1_project1_folder2_subfolder1.save()

        # erstelle zwei Order für user1, die dem Projekt user1_project4 zugewiesen werden
        self._user1_project4_folder1 = Folder(name=u'Übung 01', parent=self._user1_project4.rootFolder,
                                              root=self._user1_project4.rootFolder)
        self._user1_project4_folder1.save()
        self._user1_project4_folder2 = Folder(name=u'Übung 02', parent=self._user1_project4_folder1,
                                              root=self._user1_project4.rootFolder)
        self._user1_project4_folder2.save()
        self._user1_project4_folder3 = Folder(name=u'übung 02', parent=self._user1_project4.rootFolder,
                                              root=self._user1_project4.rootFolder)
        self._user1_project4_folder3.save()

        # erstelle zwei Order für user1, die der Vorlage user1_template1 zugewiesen werden
        # erstelle einen Unterordner in _user1_template1_folder2
        self._user1_template1_folder1 = Folder(name='user1_template1_folder1', parent=self._user1_template1.rootFolder,
                                               root=self._user1_template1.rootFolder)
        self._user1_template1_folder1.save()
        self._user1_template1_folder2 = Folder(name='user1_template1_folder2', parent=self._user1_template1.rootFolder,
                                               root=self._user1_template1.rootFolder)
        self._user1_template1_folder2.save()
        self._user1_template1_folder2_subfolder1 = Folder(name='user1_template1_folder2_subfolder1',
                                                          parent=self._user1_template1_folder2,
                                                          root=self._user1_template1.rootFolder)
        self._user1_template1_folder2_subfolder1.save()

        # erstelle einen Order für user2, die dem Projekt user2_project1 zugewiesen werden
        # erstelle einen Unterordner in _user2_project1_folder1
        self._user2_project1_folder1 = Folder(name='user2_project1_folder1', parent=self._user2_project1.rootFolder,
                                              root=self._user2_project1.rootFolder)
        self._user2_project1_folder1.save()
        self._user2_project1_folder1_subfolder1 = Folder(name='user2_project1_folder1_subfolder1',
                                                         parent=self._user2_project1_folder1,
                                                         root=self._user1_project1.rootFolder)
        self._user2_project1_folder1_subfolder1.save()