1+ from time import sleep
2+
13from airgun .entities .base import BaseEntity
24from airgun .navigation import NavigateStep , navigator
3- from airgun .views .flatpak import FlatpakRemotesView
5+ from airgun .utils import retry_navigation
6+ from airgun .views .flatpak import (
7+ CreateFlatpakRemoteModal ,
8+ EditFlatpakRemoteModal ,
9+ FlatpakRemoteDeleteModal ,
10+ FlatpakRemoteDetailsView ,
11+ FlatpakRemotesView ,
12+ MirrorFlatpakRemoteModal ,
13+ )
414
515
616class FlatpakRemotesEntity (BaseEntity ):
@@ -40,17 +50,38 @@ def read_table(self):
4050 view .wait_displayed ()
4151 return view .table .read ()
4252
43- def scan (self , entity_name ):
44- """Scan a Flatpak remote.
53+ def read_remote_details (self , name , repo_search = None ):
54+ """
55+ Read details from the Flatpak remote details page
4556
46- :param str entity_name: name of the remote to scan
57+ Args:
58+ name (str): Name of the flatpak remote to be read
59+ repo_search (str, optional): Name of scanned remote repository to be searched
4760 """
4861 view = self .navigate_to (self , 'All' )
4962 view .wait_displayed ()
50- view .table .row (name = entity_name )[2 ].click ()
51- view .table .row (name = entity_name )[2 ].widget .item_select ('Scan' )
52- view .flash .assert_no_error ()
53- view .flash .dismiss ()
63+ view .search (name )
64+ view .table .row (name = name )['Name' ].widget .click ()
65+ view = FlatpakRemoteDetailsView (self .browser )
66+ view .wait_displayed ()
67+ if repo_search :
68+ view .search (repo_search )
69+ return view .read ()
70+
71+ def create (self , values ):
72+ """Create a Flatpak remote.
73+
74+ :param dict values: values to create the remote with
75+ """
76+ view = self .navigate_to (self , 'All' )
77+ view .wait_displayed ()
78+ view .create_new_btn .click ()
79+ create_modal = CreateFlatpakRemoteModal (self .browser )
80+ create_modal .wait_displayed ()
81+ create_modal .fill (values )
82+ create_modal .create_btn .click ()
83+ view = FlatpakRemoteDetailsView (self .browser )
84+ view .wait_displayed (delay = 3 )
5485
5586 def edit (self , entity_name , values ):
5687 """Edit a Flatpak remote.
@@ -62,10 +93,12 @@ def edit(self, entity_name, values):
6293 view .wait_displayed ()
6394 view .table .row (name = entity_name )[2 ].click ()
6495 view .table .row (name = entity_name )[2 ].widget .item_select ('Edit' )
65- view .fill (values )
66- view .submit .click ()
67- view .flash .assert_no_error ()
68- view .flash .dismiss ()
96+ edit_modal = EditFlatpakRemoteModal (self .browser )
97+ edit_modal .wait_displayed ()
98+ edit_modal .fill (values )
99+ edit_modal .update_btn .click ()
100+ view = FlatpakRemoteDetailsView (self .browser )
101+ view .wait_displayed (delay = 3 )
69102
70103 def delete (self , entity_name ):
71104 """Delete a Flatpak remote.
@@ -76,16 +109,55 @@ def delete(self, entity_name):
76109 view .wait_displayed ()
77110 view .table .row (name = entity_name )[2 ].click ()
78111 view .table .row (name = entity_name )[2 ].widget .item_select ('Delete' )
79- self .browser .handle_alert ()
112+ delete_modal = FlatpakRemoteDeleteModal (self .browser )
113+ delete_modal .wait_displayed ()
114+ delete_modal .delete_btn .click ()
115+ sleep (3 )
116+ self .browser .plugin .ensure_page_safe ()
117+ view = FlatpakRemotesView (self .browser )
118+ view .wait_displayed (delay = 3 )
119+
120+ def scan (self , entity_name ):
121+ """Scan a Flatpak remote.
122+
123+ :param str entity_name: name of the remote to scan
124+ """
125+ view = self .navigate_to (self , 'All' )
126+ view .wait_displayed ()
127+ view .table .row (name = entity_name )[2 ].click ()
128+ view .table .row (name = entity_name )[2 ].widget .item_select ('Scan' )
80129 view .flash .assert_no_error ()
81130 view .flash .dismiss ()
82131
132+ def mirror (self , remote , repo , product ):
133+ """Mirror a repository from Flatpak remote.
134+
135+ :param str remote: name of the remote to mirror from
136+ :param str repo: name of the repository to be mirrored
137+ :param str product: name of the product where the repository should be mirrored
138+ """
139+ view = self .navigate_to (self , 'All' )
140+ view .wait_displayed ()
141+ view .search (remote )
142+ view .table .row (name = remote )['Name' ].widget .click ()
143+ view = FlatpakRemoteDetailsView (self .browser )
144+ view .wait_displayed ()
145+ view .search (repo ) # in case of many repos
146+ view .table .row (name = repo )['Mirror' ].widget .click ()
147+ mirror_modal = MirrorFlatpakRemoteModal (self .browser )
148+ mirror_modal .wait_displayed ()
149+ mirror_modal .searchbar .fill (product .name )
150+ self .browser .plugin .ensure_page_safe ()
151+ mirror_modal .mirror_btn .click ()
152+ view .wait_displayed (delay = 3 )
153+
83154
84155@navigator .register (FlatpakRemotesEntity , 'All' )
85156class ShowAllFlatpakRemotes (NavigateStep ):
86157 """Navigate to All Flatpak Remotes page."""
87158
88159 VIEW = FlatpakRemotesView
89160
161+ @retry_navigation
90162 def step (self , * args , ** kwargs ):
91163 self .view .menu .select ('Content' , 'Flatpak Remotes' )
0 commit comments