Exemplo n.º 1
0
def test_usergroup_eq():
    usergroup1 = Usergroup(4)
    usergroup2 = Usergroup(4)
    usergroup3 = Usergroup(7)

    assert usergroup1 == usergroup2
    assert usergroup1 != usergroup3
Exemplo n.º 2
0
def test_insert_retrieve_delete_group_user(test_database):
    user = User(1, name="test")
    test_database.insert_group_user(group=Usergroup(4), user=user)

    retrieved_group, retrieved_user = test_database.retrieve_group_user(
        where="group_id=%s AND user_id=%s", where_values=(4, 1))
    assert retrieved_group.id == 4
    assert retrieved_group.name == "Global Moderation Team"
    assert retrieved_group.mode is None
    assert retrieved_user.id == 1
    assert retrieved_user.name == "test"

    test_database.delete_group_user(group=Usergroup(4), user=user)

    retrieved_group_user_relation = test_database.retrieve_group_user(
        where="group_id=%s AND user_id=%s", where_values=(4, 1))
    assert retrieved_group_user_relation is None
Exemplo n.º 3
0
def test_insert_retrieve_multiple_group_users(test_database):
    user = User(1, name="test")
    test_database.insert_group_user(group=Usergroup(4), user=user)
    test_database.insert_group_user(group=Usergroup(4),
                                    user=User(2, name="test2"))
    test_database.insert_group_user(group=Usergroup(7), user=user)

    retrieved_group_user_relations = test_database.retrieve_group_users(
        where="user_id=%s", where_values=(1, ))
    retrieved_groups = []
    retrieved_users = []
    for retrieved_group, retrieved_user in retrieved_group_user_relations:
        retrieved_groups.append(retrieved_group)
        retrieved_users.append(retrieved_user)

    assert Usergroup(4) in retrieved_groups
    assert Usergroup(7) in retrieved_groups
    assert retrieved_users == [user, user]
Exemplo n.º 4
0
async def test_insert_retrieve_event_group_change_hybrid(test_database):
    event_old = Event(_type="add",
                      time=from_string("2020-01-01 00:00:00"),
                      user=User(2, name="sometwo"),
                      group=Usergroup(7, mode="osu"))
    event = Event(_type="add",
                  time=datetime.utcnow(),
                  user=User(2, name="sometwo"),
                  group=Usergroup(7, mode="taiko"))

    test_database.insert_event(event_old)
    test_database.insert_event(event)

    retrieved_event = await test_database.retrieve_event("type=%s", ("add", ),
                                                         order_by="time DESC")
    assert retrieved_event.type == event.type
    assert retrieved_event.time == event.time
    assert retrieved_event.group == event.group
    assert retrieved_event.group.mode == event.group.mode
    assert retrieved_event.user == event.user
    assert retrieved_event == event
Exemplo n.º 5
0
async def test_insert_retrieve_event_group_change(test_database):
    event = Event(_type="add",
                  time=datetime.utcnow(),
                  user=User(2, name="sometwo"),
                  group=Usergroup(7, mode="osu"))
    test_database.insert_event(event)

    retrieved_event = await test_database.retrieve_event("type=%s", ("add", ))
    assert retrieved_event.type == event.type
    assert retrieved_event.time == event.time
    assert retrieved_event.group == event.group
    assert retrieved_event.group.mode == event.group.mode
    assert retrieved_event.user == event.user
    assert retrieved_event == event
Exemplo n.º 6
0
 def retrieve_group_users(
     self,
     where: str,
     where_values: tuple = None
 ) -> Generator[Tuple[Usergroup, User], None, None]:
     """Returns a generator of all group user relations from the database matching the given WHERE clause."""
     fetched_rows = self.retrieve_table_data(table="group_users",
                                             where=where,
                                             where_values=where_values,
                                             selection="group_id, user_id")
     for row in (fetched_rows or []):
         group = Usergroup(row[0])
         user = self.retrieve_user("id=%s", (row[1], ))
         yield (group, user)
Exemplo n.º 7
0
    async def retrieve_events(
            self,
            where: str,
            where_values: tuple = None,
            extensive: bool = False) -> Generator[Event, None, None]:
        """Returns an asynchronous generator of all events from the database matching the given WHERE clause.
        Optionally retrieve extensively so that more can be queried (e.g. user name, beatmap creator/artist/title)."""
        if not extensive:
            fetched_rows = self.__fetch_events(where, where_values)
        else:
            fetched_rows = self.__fetch_events_extensive(where, where_values)

        for row in (fetched_rows or []):
            await asyncio.sleep(
                0
            )  # Return control back to the event loop, granting other tasks a window to start/resume.
            _type = row[0]
            time = row[1]
            beatmapset = self.retrieve_beatmapset(
                "id=%s", (row[2], )) if row[2] else None
            discussion = self.retrieve_discussion(
                "id=%s", (row[3], )) if row[3] else None
            user = self.retrieve_user("id=%s", (row[4], )) if row[4] else None
            group = Usergroup(
                row[5], mode=row[6] if row[6] else None) if row[5] else None
            newspost = self.retrieve_newspost("id=%s",
                                              (row[7], )) if row[7] else None
            content = row[8]
            yield Event(_type,
                        time,
                        beatmapset,
                        discussion,
                        user,
                        group,
                        newspost,
                        content=content)
Exemplo n.º 8
0
def test_usergroup_str():
    usergroup = Usergroup(4)
    assert str(usergroup) == "Global Moderation Team"
Exemplo n.º 9
0
def test_usergroup_hash():
    assert hash(Usergroup(4))
Exemplo n.º 10
0
def test_usergroup_eq_different_types():
    assert Usergroup(4) != "string"
Exemplo n.º 11
0
def test_usergroup_str_id():
    usergroup = Usergroup("4")

    assert usergroup.id == 4
    assert usergroup.name == "Global Moderation Team"
Exemplo n.º 12
0
def test_usergroup():
    usergroup = Usergroup(4)

    assert usergroup.id == 4
    assert usergroup.name == "Global Moderation Team"
Exemplo n.º 13
0
    async def retrieve_events(
            self,
            where: str,
            where_values: tuple = None,
            group_by: str = None,
            order_by: str = None,
            limit: int = None,
            extensive: bool = False) -> Generator[Event, None, None]:
        """Returns an asynchronous generator of all events from the database matching the given WHERE clause.
        Optionally retrieve extensively so that more can be queried (e.g. user name, beatmap creator/artist/title)."""
        if not extensive:
            fetched_rows = self.__fetch_events(where, where_values, order_by,
                                               limit)
        else:
            fetched_rows = self.__fetch_events_extensive(
                where, where_values, order_by, limit)

        for row in (fetched_rows or []):
            await asyncio.sleep(
                0
            )  # Return control back to the event loop, granting other tasks a window to start/resume.

            # Treat deleted beatmapsets/discussions as if not stored.
            with suppress(DeletedContextError):
                _type = row[0]
                time = row[1]
                beatmapset = self.retrieve_beatmapset(
                    "id=%s", (row[2], )) if row[2] else None
                discussion = self.retrieve_discussion(
                    "id=%s",
                    (row[3], ), beatmapset=beatmapset) if row[3] else None
                user = self.retrieve_user("id=%s",
                                          (row[4], )) if row[4] else None
                group = Usergroup(row[5], mode=row[6]
                                  if row[6] else None) if row[5] else None
                newspost = self.retrieve_newspost(
                    "id=%s", (row[7], )) if row[7] else None
                content = row[8]

                if beatmapset:
                    status_time = time
                    if _type == types.SEV:
                        reset_event = await self.retrieve_event(
                            where="(type=%s OR type=%s) AND discussion_id=%s",
                            where_values=("disqualify", "nomination_reset",
                                          discussion.id))
                        if reset_event:
                            status_time = reset_event.time

                    # Dependent on when the event happened, hence why this is here and not in `retrieve_beatmapset`.
                    beatmapset.status = self.retrieve_beatmapset_status(
                        where="beatmapset_id=%s AND time < %s",
                        where_values=(beatmapset.id, status_time),
                        order_by="time DESC")

                yield Event(_type,
                            time,
                            beatmapset,
                            discussion,
                            user,
                            group,
                            newspost,
                            content=content)