From a887b839e8fa6218c09c895b427014da8de57778 Mon Sep 17 00:00:00 2001 From: Karim Shakirov Date: Mon, 29 Sep 2025 01:11:05 +0300 Subject: [PATCH 1/4] feat: network counter for distinct names Signed-off-by: Karim Shakirov --- front/src/miminet_model.py | 4 +++- front/src/miminet_network.py | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/front/src/miminet_model.py b/front/src/miminet_model.py index 1b59d313..bd8e8c12 100644 --- a/front/src/miminet_model.py +++ b/front/src/miminet_model.py @@ -33,6 +33,8 @@ class User(db.Model, UserMixin): # type:ignore[name-defined] nick = db.Column(Text, nullable=False) avatar_uri = db.Column(Text, default="empty.jpg", nullable=False) + networks_number = db.Column(BigInteger, default=0, nullable=False) + vk_id = db.Column(Text, nullable=True) google_id = db.Column(Text, nullable=True) yandex_id = db.Column(Text, nullable=True) @@ -44,7 +46,7 @@ class Network(db.Model): # type:ignore[name-defined] author_id = db.Column(BigInteger, ForeignKey("user.id"), nullable=False) guid = db.Column(Text, nullable=False, unique=True) - title = db.Column(Text, default="Новая сеть", nullable=False) + title = db.Column(Text, nullable=False) description = db.Column(Text, default="", nullable=True) diff --git a/front/src/miminet_network.py b/front/src/miminet_network.py index eee16ad7..0001927b 100644 --- a/front/src/miminet_network.py +++ b/front/src/miminet_network.py @@ -24,10 +24,11 @@ def create_network(): user = current_user u = uuid.uuid4() - n = Network(author_id=user.id, guid=str(u)) + user.networks_number += 1 + n = Network(author_id=user.id, title=f"Сеть {user.networks_number}", guid=str(u)) + db.session.add(n) - db.session.flush() - db.session.refresh(n) + db.session.add(user) db.session.commit() return redirect(url_for("web_network", guid=n.guid)) From f0224cafbcfb36dcf19d9e063fc95a09d772e2a3 Mon Sep 17 00:00:00 2001 From: Karim Shakirov Date: Fri, 3 Oct 2025 12:53:51 +0300 Subject: [PATCH 2/4] ref: rename networks_number to network_counter Signed-off-by: Karim Shakirov --- front/src/miminet_model.py | 2 +- front/src/miminet_network.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/front/src/miminet_model.py b/front/src/miminet_model.py index bd8e8c12..f2154a57 100644 --- a/front/src/miminet_model.py +++ b/front/src/miminet_model.py @@ -33,7 +33,7 @@ class User(db.Model, UserMixin): # type:ignore[name-defined] nick = db.Column(Text, nullable=False) avatar_uri = db.Column(Text, default="empty.jpg", nullable=False) - networks_number = db.Column(BigInteger, default=0, nullable=False) + network_counter = db.Column(BigInteger, default=0, nullable=False) vk_id = db.Column(Text, nullable=True) google_id = db.Column(Text, nullable=True) diff --git a/front/src/miminet_network.py b/front/src/miminet_network.py index 0001927b..98592039 100644 --- a/front/src/miminet_network.py +++ b/front/src/miminet_network.py @@ -24,8 +24,8 @@ def create_network(): user = current_user u = uuid.uuid4() - user.networks_number += 1 - n = Network(author_id=user.id, title=f"Сеть {user.networks_number}", guid=str(u)) + user.network_counter += 1 + n = Network(author_id=user.id, title=f"Сеть {user.network_counter}", guid=str(u)) db.session.add(n) db.session.add(user) From a2f22522fa8ad0682eb0a3e5218e76c2c4c280c1 Mon Sep 17 00:00:00 2001 From: Karim Shakirov Date: Wed, 8 Oct 2025 20:28:43 +0300 Subject: [PATCH 3/4] ref: use single query for netwrok counter instead of separate db column Signed-off-by: Karim Shakirov --- front/src/miminet_model.py | 2 -- front/src/miminet_network.py | 11 +++++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/front/src/miminet_model.py b/front/src/miminet_model.py index f2154a57..effdef2a 100644 --- a/front/src/miminet_model.py +++ b/front/src/miminet_model.py @@ -33,8 +33,6 @@ class User(db.Model, UserMixin): # type:ignore[name-defined] nick = db.Column(Text, nullable=False) avatar_uri = db.Column(Text, default="empty.jpg", nullable=False) - network_counter = db.Column(BigInteger, default=0, nullable=False) - vk_id = db.Column(Text, nullable=True) google_id = db.Column(Text, nullable=True) yandex_id = db.Column(Text, nullable=True) diff --git a/front/src/miminet_network.py b/front/src/miminet_network.py index 98592039..55e64d0a 100644 --- a/front/src/miminet_network.py +++ b/front/src/miminet_network.py @@ -16,7 +16,7 @@ from miminet_config import check_image_with_pil from miminet_model import Network, Simulate, db, SimulateLog import datetime -from sqlalchemy import not_ +from sqlalchemy import not_, select, func @login_required @@ -24,11 +24,14 @@ def create_network(): user = current_user u = uuid.uuid4() - user.network_counter += 1 - n = Network(author_id=user.id, title=f"Сеть {user.network_counter}", guid=str(u)) + network_count = db.session.execute( + select(func.count()).select_from(Network).where(Network.author_id == user.id) + ).scalar_one() + print(network_count) + + n = Network(author_id=user.id, title=f"Сеть {network_count+1}", guid=str(u)) db.session.add(n) - db.session.add(user) db.session.commit() return redirect(url_for("web_network", guid=n.guid)) From bead4cb0e7d62d0471081aa86dec25856bf79c38 Mon Sep 17 00:00:00 2001 From: Karim Shakirov Date: Thu, 9 Oct 2025 17:42:41 +0300 Subject: [PATCH 4/4] test: network counter Signed-off-by: Karim Shakirov --- front/tests/test_network_menu.py | 45 ++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/front/tests/test_network_menu.py b/front/tests/test_network_menu.py index 1f3119b6..eb9f3785 100644 --- a/front/tests/test_network_menu.py +++ b/front/tests/test_network_menu.py @@ -8,12 +8,16 @@ class TestNetworkMenu: @pytest.fixture(scope="class") - def empty_network(self, selenium: MiminetTester): - empty_network = MiminetTestNetwork(selenium) + def first_network(self, selenium: MiminetTester): + network = MiminetTestNetwork(selenium) + yield network.url + network.delete() - yield empty_network.url - - empty_network.delete() + @pytest.fixture(scope="class") + def second_network(self, selenium: MiminetTester): + network = MiminetTestNetwork(selenium) + yield network.url + network.delete() def test_my_networks_button_press(self, selenium: Chrome): """Checks if it is possible to get to the network selection menu""" @@ -24,20 +28,39 @@ def test_my_networks_button_press(self, selenium: Chrome): assert selenium.current_url == HOME_PAGE - def test_new_network_existence(self, selenium: MiminetTester, empty_network: str): + def test_new_network_existence(self, selenium: MiminetTester, first_network: str): """Checks if the created network exists""" - selenium.get(empty_network) # open new network by URL + selenium.get(first_network) # open new network by URL network_name = selenium.find_element( By.CSS_SELECTOR, Location.Network.TITLE_LABEL.selector ).text - assert network_name == "Новая сеть" + assert network_name.startswith("Сеть ") - def test_new_network_open(self, selenium: MiminetTester, empty_network: str): - """Checks is it possible to open new network via home menu""" + def test_new_network_open(self, selenium: MiminetTester, first_network: str): + """Checks if it possible to open new network via home menu""" selenium.get(HOME_PAGE) selenium.find_element( By.XPATH, Location.MyNetworks.get_network_button_xpath(0) ).click() - assert empty_network == selenium.current_url + assert first_network == selenium.current_url + + def test_network_name_increments( + self, selenium: MiminetTester, first_network: str, second_network: str + ): + """Checks that the second network name has an incremented number""" + selenium.get(first_network) + name1 = selenium.find_element( + By.CSS_SELECTOR, Location.Network.TITLE_LABEL.selector + ).text + + selenium.get(second_network) + name2 = selenium.find_element( + By.CSS_SELECTOR, Location.Network.TITLE_LABEL.selector + ).text + + num1 = int(name1.split(" ")[-1]) + num2 = int(name2.split(" ")[-1]) + + assert num2 == num1 + 1