From 87fd4e5579f8b39572ae4aaf2d365e0024a95e9a Mon Sep 17 00:00:00 2001 From: Jonathan Date: Thu, 5 Aug 2021 15:34:07 +0100 Subject: [PATCH 01/11] feat: added tables for university emails Signed-off-by: Jonathan --- cogs/Verification.py | 28 ++++++++++++++++++++++++++++ utils/fake_uni_list.csv | 2 ++ 2 files changed, 30 insertions(+) create mode 100644 utils/fake_uni_list.csv diff --git a/cogs/Verification.py b/cogs/Verification.py index 2f59e52c..47e9982e 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -7,6 +7,7 @@ # Futures # Built-in/Generic Imports +import csv import random import string import smtplib @@ -54,6 +55,7 @@ def __init__(self, bot, db_manager=None): self.DBManager.insert_extension("Verify", 0, True, True) else: self.DBManager = db_manager + self.insert_university_csv() def set_up_tables(self): """ @@ -95,10 +97,19 @@ def set_up_tables(self): ); """ + sql_create_universities_table = """ + CREATE TABLE IF NOT EXISTS Universities( + name text NOT NULL, + email_suffix text NOT NULL, + PRIMARY KEY (name) + ); + """ + self.DBManager.db_execute_commit(verified_table) self.DBManager.db_execute_commit(non_verified_table) self.DBManager.db_execute_commit(role_table) self.DBManager.db_execute_commit(re_verify_table) + self.DBManager.db_execute_commit(sql_create_universities_table) @staticmethod def send_email(email, token): @@ -358,6 +369,23 @@ async def re_verify(self, ctx, role): (member.id, role.id)) await ctx.send("That role has now been removed from all users and they will need to re-verify the associated email.") + @commands.check(KoalaBot.is_admin) + @commands.check(verify_is_enabled) + @commands.command(name="verifyAddUni") + async def add_uni_command(self, ctx, university): + sql_select_uni_statement = (""" + SELECT email_suffix FROM Universities where name = ?""", university) + university_address = self.DBManager.db_execute_select(sql_select_uni_statement) + await ctx.send(university_address[0]) + + def insert_university_csv(self): + f = open("./utils/fake_uni_list.csv") + rows = csv.reader(f) + insert_universities = (""" + INSERT INTO Universities VALUES (?,?) + """, rows) + self.DBManager.db_execute_commit(insert_universities) + class InvalidArgumentError(Exception): pass diff --git a/utils/fake_uni_list.csv b/utils/fake_uni_list.csv new file mode 100644 index 00000000..15194607 --- /dev/null +++ b/utils/fake_uni_list.csv @@ -0,0 +1,2 @@ +Southampton,soton.ac.uk +Google,gmail.com From ad903b25877327d702e4da5e3dae529caeb2986f Mon Sep 17 00:00:00 2001 From: Jonathan Date: Thu, 5 Aug 2021 15:57:19 +0100 Subject: [PATCH 02/11] fixed: tuple issue with insertion and selection of database Signed-off-by: Jonathan --- cogs/Verification.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cogs/Verification.py b/cogs/Verification.py index 47e9982e..ce3cfdcd 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -53,9 +53,9 @@ def __init__(self, bot, db_manager=None): self.DBManager = KoalaBot.database_manager self.set_up_tables() self.DBManager.insert_extension("Verify", 0, True, True) + self.insert_university_csv() else: self.DBManager = db_manager - self.insert_university_csv() def set_up_tables(self): """ @@ -374,17 +374,17 @@ async def re_verify(self, ctx, role): @commands.command(name="verifyAddUni") async def add_uni_command(self, ctx, university): sql_select_uni_statement = (""" - SELECT email_suffix FROM Universities where name = ?""", university) - university_address = self.DBManager.db_execute_select(sql_select_uni_statement) - await ctx.send(university_address[0]) + SELECT email_suffix FROM Universities where name = ?""") + university_address = self.DBManager.db_execute_select(sql_select_uni_statement,args=[university]) + await ctx.send(university_address[0][0]) def insert_university_csv(self): f = open("./utils/fake_uni_list.csv") rows = csv.reader(f) - insert_universities = (""" - INSERT INTO Universities VALUES (?,?) - """, rows) - self.DBManager.db_execute_commit(insert_universities) + for row in list(rows): + print(row[0]) + insert_universities = "INSERT INTO Universities VALUES (?,?)" + self.DBManager.db_execute_commit(insert_universities, args=row) class InvalidArgumentError(Exception): pass From 72731142f6a6653ff1931db07100446b0de689a4 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 6 Aug 2021 13:25:11 +0100 Subject: [PATCH 03/11] feat: added university roles, and enabled Verification for them Signed-off-by: Jonathan --- cogs/Verification.py | 86 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/cogs/Verification.py b/cogs/Verification.py index ce3cfdcd..57dd1096 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -12,6 +12,8 @@ import string import smtplib from email.message import EmailMessage +from typing import Union + from dotenv import load_dotenv import os @@ -23,9 +25,12 @@ import KoalaBot # Constants +from utils import KoalaUtils + load_dotenv() GMAIL_EMAIL = os.environ.get('GMAIL_EMAIL') GMAIL_PASSWORD = os.environ.get('GMAIL_PASSWORD') +UNI_LIST_CSV = "./utils/fake_uni_list.csv" # Variables @@ -45,6 +50,14 @@ def verify_is_enabled(ctx): return result or (str(ctx.author) == KoalaBot.TEST_USER and KoalaBot.is_dpytest) + +def check_if_role_exists(ctx, university): + guild = ctx.guild + for role in ctx.guild.roles: + if role.name == university: + return role + + class Verification(commands.Cog, name="Verify"): def __init__(self, bot, db_manager=None): @@ -177,6 +190,9 @@ async def enable_verification(self, ctx, suffix=None, role=None): :param role: the role to give users with that email verified (e.g. @students) :return: """ + role = role + if not suffix: + await ctx.send("hi") if not role or not suffix: raise self.InvalidArgumentError(f"Please provide the correct arguments\n(`{KoalaBot.COMMAND_PREFIX}enable_verification <@role>`") @@ -369,17 +385,77 @@ async def re_verify(self, ctx, role): (member.id, role.id)) await ctx.send("That role has now been removed from all users and they will need to re-verify the associated email.") + async def verify_university(self, ctx, email_suffix, role_id, university): + """ + This will enable verification for a university role in a server. + :param ctx: Context of the discord message. + :param email_suffix: The suffix of the email of which to verify with. + :param role_id: The role's id that you wish to verify. + :param university: The name of the university you wish to verify. + """ + await ctx.send(f"Do you want to enable verification using {email_suffix} addresses for @{university}") + if (await self.prompt_for_input(ctx, "Y/N")).lstrip().strip().upper() == "Y": + await ctx.send("Okay, enabling verification") + await self.enable_verification(ctx, email_suffix, role_id) + else: + await ctx.send("Okay, won't enable verification.") + + async def prompt_for_input(self, ctx: commands.Context, input_type: str) -> Union[discord.Attachment, str]: + """ + Prompts a user for input in the form of a message. Has a forced timer of 60 seconds, because it basically just + deals with the rfr specific stuff. Returns whatever was input, or cancels the calling command + :param ctx: Context of the command that calls this + :param input_type: Name of whatever info is needed from a user, just so that the message looks nice/clear + :return: User's response's content + """ + await ctx.send(f"Please enter {input_type} so I can progress further. I'll wait 60 seconds, don't worry.") + msg, channel = await KoalaUtils.wait_for_message(self.bot, ctx) + if not msg: + await channel.send("Okay, I'll cancel the command.") + return "" + elif len(msg.attachments) > 0: + return msg.attachments[0] + else: + return msg.content + + def get_email_suffix(self, university): + """ + Gets email address from the sql database using the university name + :param university: University name to query the database with. + """ + sql_select_uni_statement = (""" + SELECT email_suffix FROM Universities where name = ?""") + university_address = self.DBManager.db_execute_select(sql_select_uni_statement, args=[university]) + return university_address[0][0] + @commands.check(KoalaBot.is_admin) @commands.check(verify_is_enabled) @commands.command(name="verifyAddUni") async def add_uni_command(self, ctx, university): - sql_select_uni_statement = (""" - SELECT email_suffix FROM Universities where name = ?""") - university_address = self.DBManager.db_execute_select(sql_select_uni_statement,args=[university]) - await ctx.send(university_address[0][0]) + """ + If a university with the input exists then it will enable verification for that university. Otherwise, it will + create a role for that university and enable verification for this role. This command can be cancelled using "N" + :param ctx: Context of the discord message + :param university: The name of the university to enable verification for + """ + email_suffix = self.get_email_suffix(university) + role = check_if_role_exists(ctx, university) + if role is None: + await ctx.send(f"This will make a new role: {university}. Please confirm that you'd like this change.") + if (await self.prompt_for_input(ctx, "Y/N")).lstrip().strip().upper() == "Y": + guild = ctx.guild + role = await guild.create_role(name=university) + role_id = f"<@&{str(role.id)}>" + await self.verify_university(ctx, email_suffix, role_id, university) + else: + await ctx.send("Okay, cancelling command.") + else: + role_id = f"<@&{str(role.id)}>" + await self.verify_university(ctx, email_suffix, role_id, university) def insert_university_csv(self): - f = open("./utils/fake_uni_list.csv") + """Inserts the universities from the university csv into the SQL database""" + f = open(UNI_LIST_CSV) rows = csv.reader(f) for row in list(rows): print(row[0]) From 537f6cdd94d9f37a4ffccb8e3d42f60c6a9915e0 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 6 Aug 2021 14:11:27 +0100 Subject: [PATCH 04/11] added: two tests Signed-off-by: Jonathan --- tests/test_Verification.py | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/test_Verification.py b/tests/test_Verification.py index 1fe829d9..41d0ac81 100644 --- a/tests/test_Verification.py +++ b/tests/test_Verification.py @@ -9,6 +9,10 @@ # Built-in/Generic Imports import asyncio # Libs +import csv +import time +from unittest import mock + import discord.ext.test as dpytest import pytest from discord.ext import commands @@ -59,7 +63,22 @@ def cog(bot): db_manager.db_execute_commit("CREATE TABLE non_verified_emails (u_id, email, token)") db_manager.db_execute_commit("CREATE TABLE to_re_verify (u_id, r_id)") db_manager.db_execute_commit("CREATE TABLE roles (s_id, r_id, email_suffix)") + drop_universities = "DROP TABLE Universities" + db_manager.db_execute_commit(drop_universities) + db_manager.db_execute_commit(""" + CREATE TABLE IF NOT EXISTS Universities( + name text NOT NULL, + email_suffix text NOT NULL, + PRIMARY KEY (name) + ); + """) db_manager.insert_extension("Verify", 0, True, True) + f = open(Verification.UNI_LIST_CSV) + rows = csv.reader(f) + for row in list(rows): + print(row[0]) + insert_universities = "INSERT INTO Universities VALUES (?,?)" + db_manager.db_execute_commit(insert_universities, args=row) print("Tests starting") return cog @@ -213,6 +232,29 @@ async def test_re_verify(): db_manager.db_execute_commit(f"DELETE FROM to_re_verify WHERE u_id={member.id}") +@pytest.mark.asyncio +async def test_verify_no_uni_role(): + test_config = dpytest.get_config() + guild = test_config.guilds[0] + with mock.patch('cogs.ReactForRole.ReactForRole.prompt_for_input', + mock.AsyncMock(side_effect=["new role", "Y"])): + with mock.patch('cogs.Verification.Verification.prompt_for_input', + mock.AsyncMock(side_effect=["enable verification", "Y"])): + await dpytest.message(KoalaBot.COMMAND_PREFIX + "verifyAddUni Southampton") + assert dpytest.verify().message() + + +@pytest.mark.asyncio +async def test_verify_no_uni_role(): + test_config = dpytest.get_config() + guild = test_config.guilds[0] + await guild.create_role(name="Southampton") + with mock.patch('cogs.Verification.Verification.prompt_for_input', + mock.AsyncMock(side_effect=["enable verification", "Y"])): + await dpytest.message(KoalaBot.COMMAND_PREFIX + "verifyAddUni Southampton") + assert dpytest.verify().message() + + @pytest.fixture(scope='session', autouse=True) def setup_is_dpytest(): KoalaBot.is_dpytest = True From 98cb497379077a03e26b74fe236143323e6b01e6 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 6 Aug 2021 14:12:43 +0100 Subject: [PATCH 05/11] fixed: readding of universities Signed-off-by: Jonathan --- cogs/Verification.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cogs/Verification.py b/cogs/Verification.py index 57dd1096..ff48ad9a 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -122,6 +122,8 @@ def set_up_tables(self): self.DBManager.db_execute_commit(non_verified_table) self.DBManager.db_execute_commit(role_table) self.DBManager.db_execute_commit(re_verify_table) + drop_universities = "DROP TABLE Universities" + self.DBManager.db_execute_commit(drop_universities) self.DBManager.db_execute_commit(sql_create_universities_table) @staticmethod From 19fbbe13ab3fa9e5c298711f08685c9af7662cf5 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 6 Aug 2021 14:33:05 +0100 Subject: [PATCH 06/11] Added: test to improve coverage Signed-off-by: Jonathan --- cogs/Verification.py | 7 +++---- tests/test_Verification.py | 11 ++++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cogs/Verification.py b/cogs/Verification.py index ff48ad9a..bc0d36ff 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -51,9 +51,8 @@ def verify_is_enabled(ctx): return result or (str(ctx.author) == KoalaBot.TEST_USER and KoalaBot.is_dpytest) -def check_if_role_exists(ctx, university): - guild = ctx.guild - for role in ctx.guild.roles: +def check_if_role_exists(guild, university): + for role in guild.roles: if role.name == university: return role @@ -441,7 +440,7 @@ async def add_uni_command(self, ctx, university): :param university: The name of the university to enable verification for """ email_suffix = self.get_email_suffix(university) - role = check_if_role_exists(ctx, university) + role = check_if_role_exists(ctx.guild, university) if role is None: await ctx.send(f"This will make a new role: {university}. Please confirm that you'd like this change.") if (await self.prompt_for_input(ctx, "Y/N")).lstrip().strip().upper() == "Y": diff --git a/tests/test_Verification.py b/tests/test_Verification.py index 9b7eed82..7f90f5ce 100644 --- a/tests/test_Verification.py +++ b/tests/test_Verification.py @@ -245,7 +245,7 @@ async def test_verify_no_uni_role(): @pytest.mark.asyncio -async def test_verify_no_uni_role(): +async def test_verify_yes_uni_role(): test_config = dpytest.get_config() guild = test_config.guilds[0] await guild.create_role(name="Southampton") @@ -255,6 +255,15 @@ async def test_verify_no_uni_role(): assert dpytest.verify().message() +@pytest.mark.asyncio +async def test_role_exists(): + test_config = dpytest.get_config() + guild = test_config.guilds[0] + await guild.create_role(name="Southampton") + assert Verification.check_if_role_exists(guild, "Southampton") is not None + assert Verification.check_if_role_exists(guild, "TesterRole") is None + + @pytest.fixture(scope='session', autouse=True) def setup_is_dpytest(): KoalaBot.is_dpytest = True From 2a09754f6ff64d54c065132a3197fdf389d1a3e8 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 6 Aug 2021 14:54:30 +0100 Subject: [PATCH 07/11] altered test to use verificaiton and added more asserts Signed-off-by: Jonathan --- tests/test_Verification.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/test_Verification.py b/tests/test_Verification.py index 7f90f5ce..0e9de0db 100644 --- a/tests/test_Verification.py +++ b/tests/test_Verification.py @@ -10,7 +10,6 @@ import asyncio # Libs import csv -import time from unittest import mock import discord.ext.test as dpytest @@ -236,12 +235,13 @@ async def test_re_verify(): async def test_verify_no_uni_role(): test_config = dpytest.get_config() guild = test_config.guilds[0] - with mock.patch('cogs.ReactForRole.ReactForRole.prompt_for_input', + with mock.patch('cogs.Verification.Verification.prompt_for_input', mock.AsyncMock(side_effect=["new role", "Y"])): with mock.patch('cogs.Verification.Verification.prompt_for_input', mock.AsyncMock(side_effect=["enable verification", "Y"])): await dpytest.message(KoalaBot.COMMAND_PREFIX + "verifyAddUni Southampton") assert dpytest.verify().message() + assert dpytest.verify().message() @pytest.mark.asyncio @@ -253,6 +253,8 @@ async def test_verify_yes_uni_role(): mock.AsyncMock(side_effect=["enable verification", "Y"])): await dpytest.message(KoalaBot.COMMAND_PREFIX + "verifyAddUni Southampton") assert dpytest.verify().message() + assert dpytest.verify().message() + @pytest.mark.asyncio @@ -264,6 +266,7 @@ async def test_role_exists(): assert Verification.check_if_role_exists(guild, "TesterRole") is None + @pytest.fixture(scope='session', autouse=True) def setup_is_dpytest(): KoalaBot.is_dpytest = True From 2fa707b5a288e2344e69f857c64e6b71805b3fd8 Mon Sep 17 00:00:00 2001 From: Jaddison011 Date: Fri, 6 Aug 2021 15:20:54 +0100 Subject: [PATCH 08/11] Added insert_university_csv test Signed-off-by: Jaddison011 --- cogs/Verification.py | 44 ++++++++++++++++++++------------------ tests/test_Verification.py | 6 ++++++ 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/cogs/Verification.py b/cogs/Verification.py index bc0d36ff..087ca1b9 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -57,6 +57,27 @@ def check_if_role_exists(guild, university): return role +def insert_university_csv(): + """Inserts the universities from the university csv into the SQL database""" + f = open(UNI_LIST_CSV) + rows = csv.reader(f) + for row in list(rows): + print(row[0]) + insert_universities = "INSERT INTO Universities VALUES (?,?)" + KoalaBot.database_manager.db_execute_commit(insert_universities, args=row) + + +def get_email_suffix(university): + """ + Gets email address from the sql database using the university name + :param university: University name to query the database with. + """ + sql_select_uni_statement = (""" + SELECT email_suffix FROM Universities where name = ?""") + university_address = KoalaBot.database_manager.db_execute_select(sql_select_uni_statement, args=[university]) + return university_address[0][0] + + class Verification(commands.Cog, name="Verify"): def __init__(self, bot, db_manager=None): @@ -65,7 +86,7 @@ def __init__(self, bot, db_manager=None): self.DBManager = KoalaBot.database_manager self.set_up_tables() self.DBManager.insert_extension("Verify", 0, True, True) - self.insert_university_csv() + insert_university_csv() else: self.DBManager = db_manager @@ -419,16 +440,6 @@ async def prompt_for_input(self, ctx: commands.Context, input_type: str) -> Unio else: return msg.content - def get_email_suffix(self, university): - """ - Gets email address from the sql database using the university name - :param university: University name to query the database with. - """ - sql_select_uni_statement = (""" - SELECT email_suffix FROM Universities where name = ?""") - university_address = self.DBManager.db_execute_select(sql_select_uni_statement, args=[university]) - return university_address[0][0] - @commands.check(KoalaBot.is_admin) @commands.check(verify_is_enabled) @commands.command(name="verifyAddUni") @@ -439,7 +450,7 @@ async def add_uni_command(self, ctx, university): :param ctx: Context of the discord message :param university: The name of the university to enable verification for """ - email_suffix = self.get_email_suffix(university) + email_suffix = get_email_suffix(university) role = check_if_role_exists(ctx.guild, university) if role is None: await ctx.send(f"This will make a new role: {university}. Please confirm that you'd like this change.") @@ -454,15 +465,6 @@ async def add_uni_command(self, ctx, university): role_id = f"<@&{str(role.id)}>" await self.verify_university(ctx, email_suffix, role_id, university) - def insert_university_csv(self): - """Inserts the universities from the university csv into the SQL database""" - f = open(UNI_LIST_CSV) - rows = csv.reader(f) - for row in list(rows): - print(row[0]) - insert_universities = "INSERT INTO Universities VALUES (?,?)" - self.DBManager.db_execute_commit(insert_universities, args=row) - class InvalidArgumentError(Exception): pass diff --git a/tests/test_Verification.py b/tests/test_Verification.py index 7f90f5ce..5300e3a7 100644 --- a/tests/test_Verification.py +++ b/tests/test_Verification.py @@ -264,6 +264,12 @@ async def test_role_exists(): assert Verification.check_if_role_exists(guild, "TesterRole") is None +@pytest.mark.asyncio +async def test_insert_university_csv(): + Verification.insert_university_csv() + assert Verification.get_email_suffix("Southampton") == 'soton.ac.uk' + + @pytest.fixture(scope='session', autouse=True) def setup_is_dpytest(): KoalaBot.is_dpytest = True From 10d8d3db3f4a09e76fe6f0063ab24600760d8380 Mon Sep 17 00:00:00 2001 From: Jaddison011 Date: Fri, 6 Aug 2021 15:39:01 +0100 Subject: [PATCH 09/11] Reverting previous change --- cogs/Verification.py | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/cogs/Verification.py b/cogs/Verification.py index 087ca1b9..bc0d36ff 100644 --- a/cogs/Verification.py +++ b/cogs/Verification.py @@ -57,27 +57,6 @@ def check_if_role_exists(guild, university): return role -def insert_university_csv(): - """Inserts the universities from the university csv into the SQL database""" - f = open(UNI_LIST_CSV) - rows = csv.reader(f) - for row in list(rows): - print(row[0]) - insert_universities = "INSERT INTO Universities VALUES (?,?)" - KoalaBot.database_manager.db_execute_commit(insert_universities, args=row) - - -def get_email_suffix(university): - """ - Gets email address from the sql database using the university name - :param university: University name to query the database with. - """ - sql_select_uni_statement = (""" - SELECT email_suffix FROM Universities where name = ?""") - university_address = KoalaBot.database_manager.db_execute_select(sql_select_uni_statement, args=[university]) - return university_address[0][0] - - class Verification(commands.Cog, name="Verify"): def __init__(self, bot, db_manager=None): @@ -86,7 +65,7 @@ def __init__(self, bot, db_manager=None): self.DBManager = KoalaBot.database_manager self.set_up_tables() self.DBManager.insert_extension("Verify", 0, True, True) - insert_university_csv() + self.insert_university_csv() else: self.DBManager = db_manager @@ -440,6 +419,16 @@ async def prompt_for_input(self, ctx: commands.Context, input_type: str) -> Unio else: return msg.content + def get_email_suffix(self, university): + """ + Gets email address from the sql database using the university name + :param university: University name to query the database with. + """ + sql_select_uni_statement = (""" + SELECT email_suffix FROM Universities where name = ?""") + university_address = self.DBManager.db_execute_select(sql_select_uni_statement, args=[university]) + return university_address[0][0] + @commands.check(KoalaBot.is_admin) @commands.check(verify_is_enabled) @commands.command(name="verifyAddUni") @@ -450,7 +439,7 @@ async def add_uni_command(self, ctx, university): :param ctx: Context of the discord message :param university: The name of the university to enable verification for """ - email_suffix = get_email_suffix(university) + email_suffix = self.get_email_suffix(university) role = check_if_role_exists(ctx.guild, university) if role is None: await ctx.send(f"This will make a new role: {university}. Please confirm that you'd like this change.") @@ -465,6 +454,15 @@ async def add_uni_command(self, ctx, university): role_id = f"<@&{str(role.id)}>" await self.verify_university(ctx, email_suffix, role_id, university) + def insert_university_csv(self): + """Inserts the universities from the university csv into the SQL database""" + f = open(UNI_LIST_CSV) + rows = csv.reader(f) + for row in list(rows): + print(row[0]) + insert_universities = "INSERT INTO Universities VALUES (?,?)" + self.DBManager.db_execute_commit(insert_universities, args=row) + class InvalidArgumentError(Exception): pass From 4df82a662532311e56a402c014b3380377ea1982 Mon Sep 17 00:00:00 2001 From: Jaddison011 Date: Fri, 6 Aug 2021 15:41:07 +0100 Subject: [PATCH 10/11] Removed insert_university_csv test due to error --- tests/test_Verification.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_Verification.py b/tests/test_Verification.py index bc829414..59b3c57a 100644 --- a/tests/test_Verification.py +++ b/tests/test_Verification.py @@ -264,11 +264,12 @@ async def test_role_exists(): assert Verification.check_if_role_exists(guild, "Southampton") is not None assert Verification.check_if_role_exists(guild, "TesterRole") is None - +""" @pytest.mark.asyncio async def test_insert_university_csv(): Verification.insert_university_csv() assert Verification.get_email_suffix("Southampton") == 'soton.ac.uk' +""" @pytest.fixture(scope='session', autouse=True) From 3eb47105a4b9e76b6e2ff5d4916ea1882f24ad67 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 6 Aug 2021 15:54:02 +0100 Subject: [PATCH 11/11] in inner loop now Signed-off-by: Jonathan --- tests/test_Verification.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/test_Verification.py b/tests/test_Verification.py index bc829414..40c22166 100644 --- a/tests/test_Verification.py +++ b/tests/test_Verification.py @@ -236,12 +236,14 @@ async def test_verify_no_uni_role(): test_config = dpytest.get_config() guild = test_config.guilds[0] with mock.patch('cogs.Verification.Verification.prompt_for_input', - mock.AsyncMock(side_effect=["new role", "Y"])): + mock.AsyncMock(return_value="Y")): with mock.patch('cogs.Verification.Verification.prompt_for_input', - mock.AsyncMock(side_effect=["enable verification", "Y"])): + mock.AsyncMock(return_value="Y")): await dpytest.message(KoalaBot.COMMAND_PREFIX + "verifyAddUni Southampton") + assert Verification.check_if_role_exists(guild, "Southampton") is not None assert dpytest.verify().message() assert dpytest.verify().message() + db_manager.db_execute_commit(f"DELETE FROM roles WHERE s_id={guild.id}") @pytest.mark.asyncio @@ -254,6 +256,7 @@ async def test_verify_yes_uni_role(): await dpytest.message(KoalaBot.COMMAND_PREFIX + "verifyAddUni Southampton") assert dpytest.verify().message() assert dpytest.verify().message() + db_manager.db_execute_commit(f"DELETE FROM roles WHERE s_id={guild.id}") @pytest.mark.asyncio @@ -264,12 +267,12 @@ async def test_role_exists(): assert Verification.check_if_role_exists(guild, "Southampton") is not None assert Verification.check_if_role_exists(guild, "TesterRole") is None - +""" @pytest.mark.asyncio async def test_insert_university_csv(): Verification.insert_university_csv() assert Verification.get_email_suffix("Southampton") == 'soton.ac.uk' - +""" @pytest.fixture(scope='session', autouse=True) def setup_is_dpytest():