예제 #1
0
    def test_delete_flow(self):
        """
        フローを削除する
        ユーザ×フローとグループ×フロー(あれば)も削除する
        """
        # ユーザの作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]
        # ユーザをグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # プロジェクトの作成
        project_name = 'プロジェクト'
        models.create_project_with_permission(project_name, user.id)
        projects = models.fetch_readable_projects_by_user_id(user.id)

        # 削除用フローの作成
        flow_name = 'テストフロー'
        flow_uuid = 'test'
        models.create_flow_with_permission(flow_name, user, projects[0].id,
                                           flow_uuid)

        # 削除前の確認
        flow = models.fetch_flow_by_uuid(flow_uuid)
        self.assertIsNotNone(flow)

        userpermission_flow = db.session.query(
            models.UserPermissions_Flow).filter_by(user_id=user.id,
                                                   flow_uuid=flow_uuid)
        self.assertEqual(userpermission_flow.count(), 1)

        grouppermission_flow = db.session.query(
            models.GroupPermissions_Flow).filter_by(group_id=group.id,
                                                    flow_uuid=flow_uuid)
        self.assertEqual(grouppermission_flow.count(), 1)

        # 削除
        models.delete_flow_with_permission_by_uuid(flow_uuid)

        # 削除後の確認
        flow = models.fetch_flow_by_uuid(flow_uuid)
        self.assertIsNone(flow)
        userpermission_flow = db.session.query(
            models.UserPermissions_Flow).filter_by(user_id=user.id,
                                                   flow_uuid=flow_uuid)
        self.assertEqual(userpermission_flow.count(), 0)
        grouppermission_flow = db.session.query(
            models.GroupPermissions_Flow).filter_by(group_id=group.id,
                                                    flow_uuid=flow_uuid)
        self.assertEqual(grouppermission_flow.count(), 0)
예제 #2
0
    def test_create_flow_belong_to_group(self):
        """
        フローの作成のテスト(ユーザはグループに所属している)
        必要なデータが作成されているかに対するテスト
        ・フロー
        ・ユーザ×フロー
        ・グループ×フロー
        """
        # ユーザ作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # プロジェクトの作成
        project_name = '開発用'
        models.create_project_with_permission(project_name, user.id)
        projects = models.fetch_readable_projects_by_user_id(user.id)

        # ユーザをグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # フローの作成
        flow_name = 'テストフロー'
        flow_uuid = 'test'
        models.create_flow_with_permission(flow_name, user, projects[0].id,
                                           flow_uuid)

        # 作成されたかのテスト
        flow = models.fetch_flow_by_uuid(flow_uuid)
        self.assertEqual(flow.uuid, flow_uuid)
        self.assertEqual(json.loads(flow.json)['label'], flow_name)
        self.assertEqual(flow.project_id, projects[0].id)
        self.assertEqual(flow.creator_id, user.id)

        # ユーザ×フローが作成されているかのテスト
        userpermission_flows = db.session.query(
            models.UserPermissions_Flow).filter_by(flow_uuid=flow_uuid,
                                                   user_id=user.id)
        self.assertEqual(userpermission_flows.count(), 1)
        self.assertEqual(userpermission_flows[0].user_id, user.id)
        self.assertEqual(userpermission_flows[0].flow_uuid, flow_uuid)

        # グループ×フローが作成されているかのテスト
        grouppermission_flows = db.session.query(
            models.GroupPermissions_Flow).filter_by(flow_uuid=flow_uuid,
                                                    group_id=group.id)
        self.assertEqual(grouppermission_flows.count(), 1)
        self.assertEqual(grouppermission_flows[0].group_id, group.id)
        self.assertEqual(grouppermission_flows[0].flow_uuid, flow_uuid)
예제 #3
0
    def test_create_group(self):
        """
        グループを作成するテスト
        """
        # 作成するグループ
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()

        self.assertEqual(group[0].name, group_name)
        self.assertEqual(group[0].creatable_projects, True)
예제 #4
0
    def test_delete_project_belong_to_group(self):
        """
        プロジェクト削除のテスト(ユーザはグループに所属している)
        必要なデータが削除されているかのテスト
        ・プロジェクト
        ・対象プロジェクトのユーザ×プロジェクト
        ・対象プロジェクトのグループ×プロジェクト
        """
        # 作成するプロジェクト情報
        project_name = '開発用'

        # ユーザ作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # ユーザをグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # プロジェクト作成
        models.create_project_with_permission(project_name, user.id)
        before_projects = models.fetch_readable_projects_by_user_id(user.id)

        userpermission_projects = models.get_userpermissions_project(
            user.id, before_projects[0].id)
        self.assertIsNotNone(userpermission_projects)
        grouppermission_projects = models.get_grouppermissions_project(
            group.id, before_projects[0].id)
        self.assertIsNotNone(grouppermission_projects)

        # プロジェクトを削除
        models.delete_project_with_permission_by_uuid(before_projects[0].uuid)

        # プロジェクトが削除されているか
        after_projects = models.fetch_readable_projects_by_user_id(user.id)
        self.assertEqual(len(after_projects), 0)

        # ユーザ×プロジェクトにおいて、削除したプロジェクトのデータが削除されているか?
        userpermission_projects = models.get_userpermissions_project(
            user.id, before_projects[0].id)
        self.assertIsNone(userpermission_projects)

        # グループ×プロジェクトにおいて、削除したプロジェクトのデータが削除されているか?
        grouppermission_projects = models.get_grouppermissions_project(
            group.id, before_projects[0].id)
        self.assertIsNone(grouppermission_projects)
예제 #5
0
    def test_get_readable_projects_by_group(self):
        """
        グループが見ることができるプロジェクトの取得テスト
        グループ単体
        """
        # 作成するプロジェクト情報
        project_name_1 = 'ユーザ1用プロジェクト'
        project_name_2 = 'ユーザ2用プロジェクト'
        project_name_3 = '共用プロジェクト'

        # プロジェクト作成用ユーザ作成
        email = '*****@*****.**'
        models.create_user('プロジェクト作成用', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # プロジェクトの作成
        models.create_project_with_permission(project_name_1, user.id)
        models.create_project_with_permission(project_name_2, user.id)
        models.create_project_with_permission(project_name_3, user.id)

        projects = db.session.query(models.Projects).all()

        # グループの作成
        group_name1 = "テストグループ1"
        models.create_group(group_name1)
        group_name2 = "テストグループ2"
        models.create_group(group_name2)

        group1 = db.session.query(models.Groups).all()[0]
        group2 = db.session.query(models.Groups).all()[1]

        # グループ1にプロジェクト1,3を割り当てる
        models.grant_group_to_project(group1.id, projects[0].id)
        models.grant_group_to_project(group1.id, projects[2].id)

        # グループ2にプロジェクト2,3を割り当てる
        models.grant_group_to_project(group2.id, projects[1].id)
        models.grant_group_to_project(group2.id, projects[2].id)

        # それぞれのグループが見れるプロジェクトが取得できているかテスト
        projects_for_group1 = models.fetch_readable_projects_by_group_id(
            group1.id)
        self.assertEqual(len(projects_for_group1), 2)
        self.assertEqual(projects_for_group1[0].name, project_name_1)
        self.assertEqual(projects_for_group1[1].name, project_name_3)

        projects_for_group2 = models.fetch_readable_projects_by_group_id(
            group2.id)
        self.assertEqual(len(projects_for_group2), 2)
        self.assertEqual(projects_for_group2[0].name, project_name_2)
        self.assertEqual(projects_for_group2[1].name, project_name_3)
예제 #6
0
    def test_create_project_belong_to_group(self):
        """
        プロジェクトの作成のテスト(ユーザはグループに所属している)
        必要なデータが作成されているかに対するテスト
        ・プロジェクト
        ・ユーザ×プロジェクト
        ・グループ×プロジェクト
        """
        # 作成するプロジェクト情報
        project_name = '開発用'

        # ユーザ作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # ユーザをグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # プロジェクト作成
        models.create_project_with_permission(project_name, user.id)

        # プロジェクトが作成されているかテスト
        projects = models.fetch_readable_projects_by_user_id(user.id)
        self.assertEqual(len(projects), 1)
        self.assertEqual(projects[0].name, project_name)
        self.assertEqual(projects[0].creator_id, user.id)

        # ユーザ×プロジェクトが作成されているかテスト
        userpermission_projects = db.session.query(
            models.UserPermissions_Project).filter_by(
                project_id=projects[0].id, user_id=user.id)
        self.assertEqual(userpermission_projects.count(), 1)
        self.assertEqual(userpermission_projects[0].user_id, user.id)
        self.assertEqual(userpermission_projects[0].project_id, projects[0].id)

        # グループ×プロジェクトが作成されていることの確認テスト
        grouppermission_projects = db.session.query(
            models.GroupPermissions_Project).filter_by(
                project_id=projects[0].id, group_id=group.id)
        self.assertEqual(grouppermission_projects.count(), 1)
        self.assertEqual(grouppermission_projects[0].group_id, group.id)
        self.assertEqual(grouppermission_projects[0].project_id,
                         projects[0].id)
예제 #7
0
    def test_delete_group(self):
        """
        グループを削除するテスト
        """
        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)

        before_group_count = db.session.query(models.Groups).count()
        self.assertEqual(before_group_count, 1)

        # グループの取得と削除
        group = models.get_group_by_id(1)
        models.delete_group_by_id(group.id)

        after_group_count = db.session.query(models.Groups).count()
        self.assertEqual(after_group_count, 0)
예제 #8
0
    def test_add_user_to_group(self):
        """
        グループにユーザを追加するテスト
        """
        # ユーザの作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        before_user = db.session.query(
            models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # 所属させてもう一度ユーザを取得
        models.assign_user_to_group(before_user.id, group.id)
        after_user = db.session.query(
            models.Users).filter_by(email=email).first()

        self.assertEqual(after_user.group_id, group.id)
예제 #9
0
    def test_get_group(self):
        """
        ユーザの所属しているグループを取得するテスト
        """
        # ユーザの作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        before_user = db.session.query(
            models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # グループに所属させる
        models.assign_user_to_group(before_user.id, group.id)

        assigned_group = models.get_group_from_user_id(before_user.id)

        self.assertEqual(assigned_group.id, group.id)
        self.assertEqual(assigned_group.name, group_name)
예제 #10
0
    def test_delete_project_2(self):
        """
        プロジェクトを削除するテスト
        パーミッションを意識したもの

        ユーザ×プロジェクト・・・・削除権限あり
        グループ×プロジェクト・・・削除権限なし

        ユーザの権限が優先されるため削除される
        """
        # プロジェクト作成用ユーザ作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # プロジェクト作成用ユーザをグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # 作成するプロジェクト情報
        project_name = '開発用'
        # プロジェクトの作成
        # デフォルトがユーザ権限はプロジェクトを削除できる、グループ権限は削除できない
        models.create_project_with_permission(project_name, user.id)
        projects = models.fetch_readable_projects_by_user_id(user.id)

        # プロジェクトの削除
        delete_project = models.delete_project(user.id, projects[0].uuid)

        # テスト
        self.assertEqual(delete_project, True)
        # プロジェクトが削除されていることの確認
        projects = models.fetch_readable_projects_by_user_id(user.id)
        self.assertEqual(len(projects), 0)
예제 #11
0
    def test_fetch_flow(self):
        """
        指定したフローの内容を取得する
        """
        # ユーザの作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]
        # ユーザをグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # プロジェクトの作成
        project_name = 'プロジェクト'
        models.create_project_with_permission(project_name, user.id)
        projects = models.fetch_readable_projects_by_user_id(user.id)

        # フローの作成
        flow_name = 'テストフロー'
        flow_uuid = 'test'
        models.create_flow_with_permission(flow_name, user, projects[0].id,
                                           flow_uuid)

        # 取得
        flow = models.make_dict_from_model(
            models.fetch_flow_by_uuid(flow_uuid))
        flow_json = json.loads(flow['json'])

        self.assertEqual(flow['uuid'], flow_uuid)
        self.assertEqual(flow_json['label'], flow_name)
        self.assertEqual(flow['project_id'], projects[0].id)
        self.assertEqual(flow['creator_id'], user.id)
예제 #12
0
    def test_get_projects_2(self):
        """
        プロジェクト一覧を正しい権限をつけて返す

        グループ:プロジェクトの削除権限あり

        プロジェクト1:
            ユーザ×プロジェクト・・・・存在しない
            グループ×プロジェクト・・・削除権限あり

        プロジェクト2:
            ユーザ×プロジェクト・・・・削除権限あり
            グループ×プロジェクト・・・削除権限あり

        プロジェクト3:
            ユーザ×プロジェクト・・・・削除権限なし
            グループ×プロジェクト・・・削除権限あり

        プロジェクト1はグループが権限を持っているので一覧に取得できる
        プロジェクト3はユーザ権限があるので、削除できない

        削除できるプロジェクトは1、2
        """
        # プロジェクト作成用ユーザ作成
        email_p = '*****@*****.**'
        models.create_user('プロジェクト作成用ユーザ', email_p, '')
        create_project_user = db.session.query(
            models.Users).filter_by(email=email_p).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # グループに所属させる
        models.assign_user_to_group(create_project_user.id, group.id)

        # プロジェクトの作成
        project_name1 = '開発用1'
        project_name2 = '開発用2'
        project_name3 = '開発用3'

        models.create_project_with_permission(project_name1,
                                              create_project_user.id)
        models.create_project_with_permission(project_name2,
                                              create_project_user.id)
        models.create_project_with_permission(project_name3,
                                              create_project_user.id)

        projects = models.fetch_readable_projects_by_user_id(
            create_project_user.id)

        # ユーザ1の作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()
        # グループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # パーミッションの設定
        # プロジェクト1
        # グループ権限を変更する
        grouppermission_project1 = models.get_grouppermissions_project(
            group.id, projects[0].id)
        grouppermission_project1.deletable_project = True
        db.session.add(grouppermission_project1)

        # プロジェクト2
        # ユーザ1用のユーザ×プロジェクトを作成
        models.grant_user_to_project(user.id, projects[1].id)
        # グループのプロジェクト削除のパーミッションをTrueに設定する(デフォルトがFalseなので)
        grouppermission_project2 = models.get_grouppermissions_project(
            group.id, projects[1].id)
        grouppermission_project2.deletable_project = True
        db.session.add(grouppermission_project2)

        # プロジェクト3
        # ユーザ1用のユーザ×プロジェクトを作成、プロジェクト削除のパーミッションをFalseにする(デフォルトがTrueなので)
        models.grant_user_to_project(user.id,
                                     projects[2].id,
                                     deletable_project=False)
        # グループのプロジェクト削除のパーミッションをTrueに設定する(デフォルトがFalseなので)
        grouppermission_project3 = models.get_grouppermissions_project(
            group.id, projects[2].id)
        grouppermission_project3.deletable_project = True
        db.session.add(grouppermission_project3)
        # コミット
        db.session.commit()

        # プロジェクト一覧の取得
        result_projects = models.get_projects_with_permission(user.id)
        project1 = [
            project for project in result_projects if project['id'] == 1
        ][0]
        project2 = [
            project for project in result_projects if project['id'] == 2
        ][0]
        project3 = [
            project for project in result_projects if project['id'] == 3
        ][0]

        # テスト
        self.assertEqual(len(result_projects), 3)
        self.assertEqual(project1['name'], project_name1)
        self.assertEqual(project1['deletable_project'], True)
        self.assertEqual(project2['name'], project_name2)
        self.assertEqual(project2['deletable_project'], True)
        self.assertEqual(project3['name'], project_name3)
        self.assertEqual(project3['deletable_project'], False)

        # 画面の制御を無視して、直接プロジェクトを削除してみる
        # プロジェクト1を削除してみる(削除できる)
        delete_project = models.delete_project(user.id, project1['uuid'])
        self.assertEqual(delete_project, True)

        # プロジェクト2を削除してみる(削除できる)
        delete_project = models.delete_project(user.id, project2['uuid'])
        self.assertEqual(delete_project, True)

        # 何かの間違いで、ユーザ1が削除できないはずのプロジェクト3を削除してみる(削除されないはず)
        delete_project = models.delete_project(user.id, project3['uuid'])
        self.assertEqual(delete_project, False)

        # 削除後のプロジェクト数を確認する(プロジェクト1と2が削除されているので、1つになるはず)
        after_readable_projects = models.get_projects_with_permission(user.id)
        self.assertEqual(len(after_readable_projects), 1)
예제 #13
0
    def test_delete_project_1(self):
        """
        プロジェクトを削除するテスト
        パーミッションを意識したもの

        ユーザ×プロジェクト・・・・存在しない
        グループ×プロジェクト・・・削除権限あり

        グループの権限が存在するため削除される
        """
        # プロジェクト作成用ユーザ作成
        email_1 = '*****@*****.**'
        models.create_user('プロジェクト作成用ユーザ', email_1, '')
        create_project_user = db.session.query(
            models.Users).filter_by(email=email_1).first()

        # グループの作成
        group_name = "テストグループ"
        models.create_group(group_name)
        group = db.session.query(models.Groups).all()[0]

        # プロジェクト作成用ユーザをグループに所属させる
        models.assign_user_to_group(create_project_user.id, group.id)

        # 作成するプロジェクト情報
        project_name = '開発用'
        # プロジェクトの作成
        models.create_project_with_permission(project_name,
                                              create_project_user.id)

        # グループ×プロジェクトの権限変更(削除できるように)
        projects = models.fetch_readable_projects_by_user_id(
            create_project_user.id)
        grouppermission_project = models.get_grouppermissions_project(
            group.id, projects[0].id)
        grouppermission_project.deletable_project = True
        db.session.add(grouppermission_project)
        db.session.commit()

        # ユーザの作成
        email = '*****@*****.**'
        models.create_user('ユーザ1', email, '')
        user = db.session.query(models.Users).filter_by(email=email).first()

        # ユーザを作成したグループに所属させる
        models.assign_user_to_group(user.id, group.id)

        # ユーザ×プロジェクトが存在しないことの確認
        userpermission_project = models.get_userpermissions_project(
            user.id, projects[0].id)
        self.assertIsNone(userpermission_project)

        # プロジェクトの削除
        delete_project = models.delete_project(user.id, projects[0].uuid)

        # テスト
        self.assertEqual(delete_project, True)
        # プロジェクトが削除されていることの確認
        projects = models.fetch_readable_projects_by_user_id(
            create_project_user.id)
        self.assertEqual(len(projects), 0)