mirror of
https://github.com/gmbrax/Pilgrim.git
synced 2026-11-10 10:40:17 +00:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40a2e727f8 | ||
|
|
08a5030846 | ||
|
|
050939b4b8 | ||
|
|
bcb76fbb7d |
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
from textual.widgets import Button
|
||||||
|
|
||||||
|
from textual import on
|
||||||
|
|
||||||
|
from pilgrim.ui.screens.modals.delete_yes_confirmation_modal import DeleteYesConfirmationModal
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteAllEntriesModal(DeleteYesConfirmationModal):
|
||||||
|
def __init__(self,diary_id:int):
|
||||||
|
super().__init__(diary_id)
|
||||||
|
self.head_text.update("Are you sure you want to delete all entries from this diary?")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@on(Button.Pressed, "#DeleteDiaryModal-DeleteButton")
|
||||||
|
def on_delete_button_pressed(self, event):
|
||||||
|
self.result = True
|
||||||
|
self.dismiss()
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
from textual.widgets import Button
|
||||||
|
|
||||||
|
from textual import on
|
||||||
|
|
||||||
|
from pilgrim.ui.screens.modals.delete_yes_confirmation_modal import DeleteYesConfirmationModal
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteAllPhotosModal(DeleteYesConfirmationModal):
|
||||||
|
def __init__(self,diary_id:int):
|
||||||
|
super().__init__(diary_id)
|
||||||
|
self.head_text.update("Are you sure you want to delete all photos from this diary?")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@on(Button.Pressed, "#DeleteDiaryModal-DeleteButton")
|
||||||
|
def on_delete_button_pressed(self, event):
|
||||||
|
self.result = True
|
||||||
|
self.dismiss()
|
||||||
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
from textual.containers import Container
|
||||||
|
from textual.widgets import Header, Footer, Label, Button,Input
|
||||||
|
from textual.screen import Screen
|
||||||
|
from textual.binding import Binding
|
||||||
|
from textual import on
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteDiaryModal(Screen):
|
||||||
|
|
||||||
|
BINDINGS = [
|
||||||
|
Binding("escape","cancel","Cancel"),
|
||||||
|
]
|
||||||
|
def __init__(self, diary_id: int,diary_name:str):
|
||||||
|
super().__init__()
|
||||||
|
self.diary_id = diary_id
|
||||||
|
self.diary_name = diary_name
|
||||||
|
self.user_input = Input(placeholder=f"Type diary name to confirm: ({self.diary_name})",id="DeleteDiaryModal-UserInput")
|
||||||
|
self.delete_button = Button("Delete Diary",id="DeleteDiaryModal-DeleteButton",disabled=True)
|
||||||
|
self.cancel_button = Button("Cancel",id="DeleteDiaryModal-CancelButton")
|
||||||
|
self.result = None
|
||||||
|
|
||||||
|
def compose(self):
|
||||||
|
yield Header()
|
||||||
|
yield Container(
|
||||||
|
Label("Are you sure you want to delete this diary?"),
|
||||||
|
self.user_input,
|
||||||
|
Container(
|
||||||
|
self.delete_button,
|
||||||
|
self.cancel_button,
|
||||||
|
id="DeleteDiaryModal-ButtonContainer",
|
||||||
|
classes="DeleteDiaryModal-ButtonContainer"
|
||||||
|
),
|
||||||
|
id="DeleteDiaryModal-MainContainer",
|
||||||
|
classes="DeleteDiaryModal-MainContainer"
|
||||||
|
)
|
||||||
|
yield Footer()
|
||||||
|
|
||||||
|
@on(Input.Changed,"#DeleteDiaryModal-UserInput")
|
||||||
|
def on_user_input_changed(self, event):
|
||||||
|
input_text = event.value.strip()
|
||||||
|
|
||||||
|
if input_text == self.diary_name:
|
||||||
|
self.delete_button.disabled = False
|
||||||
|
else:
|
||||||
|
self.delete_button.disabled = True
|
||||||
|
|
||||||
|
@on(Button.Pressed,"#DeleteDiaryModal-DeleteButton")
|
||||||
|
def on_delete_button_pressed(self, event):
|
||||||
|
self.result = True
|
||||||
|
self.dismiss()
|
||||||
|
|
||||||
|
|
||||||
|
@on(Button.Pressed,"#DeleteDiaryModal-CancelButton")
|
||||||
|
def on_cancel_button_pressed(self, event):
|
||||||
|
self.action_cancel()
|
||||||
|
|
||||||
|
|
||||||
|
def action_cancel(self):
|
||||||
|
self.dismiss()
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
from textual.containers import Container
|
||||||
|
from textual.widgets import Header, Footer, Label, Button,Input
|
||||||
|
from textual.screen import Screen
|
||||||
|
from textual.binding import Binding
|
||||||
|
from textual import on
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteYesConfirmationModal(Screen):
|
||||||
|
BINDINGS = [
|
||||||
|
Binding("escape", "cancel", "Cancel"),
|
||||||
|
]
|
||||||
|
def __init__(self,diary_id:int):
|
||||||
|
super().__init__()
|
||||||
|
self.diary_id = diary_id
|
||||||
|
self.user_input = Input(placeholder="Type 'Yes, I do ' to confirm",id="DeleteYesConfirmationModal-UserInput")
|
||||||
|
self.delete_button = Button("Delete",id="DeleteYesConfirmationModal-DeleteButton",disabled=True)
|
||||||
|
self.cancel_button = Button("Cancel",id="DeleteYesConfirmationModal-CancelButton")
|
||||||
|
self.head_text = Label("Are you sure you want to delete this diary?",id="DeleteYesConfirmationModal-HeadText")
|
||||||
|
self.second_head_text = Label("This action cannot be undone.",id="DeleteYesConfirmationModal-SecondHeadText")
|
||||||
|
self.delete_modal_container = Container(
|
||||||
|
self.head_text,
|
||||||
|
self.second_head_text,
|
||||||
|
self.user_input,
|
||||||
|
Container(
|
||||||
|
self.delete_button,
|
||||||
|
self.cancel_button,
|
||||||
|
id="DeleteYesConfirmationModal-DeleteButtonContainer",
|
||||||
|
classes="DeleteYesConfirmationModal-DeleteButtonContainer"
|
||||||
|
),
|
||||||
|
id="DeleteYesConfirmationModal-DeleteModalContainer",
|
||||||
|
classes="DeleteYesConfirmationModal-DeleteModalContainer"
|
||||||
|
)
|
||||||
|
self.result = None
|
||||||
|
|
||||||
|
@on(Input.Changed,"#DeleteYesConfirmationModal-UserInput")
|
||||||
|
def on_user_input_changed(self, event):
|
||||||
|
input_text = event.value.strip()
|
||||||
|
if input_text == "Yes, I do":
|
||||||
|
self.delete_button.disabled = False
|
||||||
|
else:
|
||||||
|
self.delete_button.disabled = True
|
||||||
|
|
||||||
|
@on(Button.Pressed,"#DeleteYesConfirmationModal-CancelButton")
|
||||||
|
def on_cancel_button_pressed(self, event):
|
||||||
|
self.action_cancel()
|
||||||
|
|
||||||
|
def action_cancel(self):
|
||||||
|
self.dismiss()
|
||||||
|
self.app.push_screen(SettingsScreen(diary=travel_diary[0]))
|
||||||
|
|
||||||
|
def compose(self):
|
||||||
|
yield Header()
|
||||||
|
yield Footer()
|
||||||
|
yield self.delete_modal_container
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
from unittest.mock import patch, MagicMock
|
||||||
|
from pilgrim.application import Application
|
||||||
|
|
||||||
|
@patch('pilgrim.application.UIApp')
|
||||||
|
@patch('pilgrim.application.ServiceManager')
|
||||||
|
@patch('pilgrim.application.Database')
|
||||||
|
@patch('pilgrim.application.ConfigManager')
|
||||||
|
def test_application_initialization_wires_dependencies(
|
||||||
|
MockConfigManager, MockDatabase, MockServiceManager, MockUIApp
|
||||||
|
):
|
||||||
|
mock_config_instance = MockConfigManager.return_value
|
||||||
|
mock_db_instance = MockDatabase.return_value
|
||||||
|
mock_session_instance = mock_db_instance.session.return_value
|
||||||
|
mock_service_manager_instance = MockServiceManager.return_value
|
||||||
|
app = Application()
|
||||||
|
MockConfigManager.assert_called_once()
|
||||||
|
MockDatabase.assert_called_once_with(mock_config_instance)
|
||||||
|
MockServiceManager.assert_called_once()
|
||||||
|
MockUIApp.assert_called_once_with(mock_service_manager_instance, mock_config_instance)
|
||||||
|
mock_config_instance.read_config.assert_called_once()
|
||||||
|
mock_db_instance.session.assert_called_once()
|
||||||
|
mock_service_manager_instance.set_session.assert_called_once_with(mock_session_instance)
|
||||||
|
|
||||||
|
@patch('pilgrim.application.UIApp')
|
||||||
|
@patch('pilgrim.application.ServiceManager')
|
||||||
|
@patch('pilgrim.application.Database')
|
||||||
|
@patch('pilgrim.application.ConfigManager')
|
||||||
|
def test_application_run_calls_methods(
|
||||||
|
MockConfigManager, MockDatabase, MockServiceManager, MockUIApp
|
||||||
|
):
|
||||||
|
app = Application()
|
||||||
|
mock_db_instance = app.database
|
||||||
|
mock_ui_instance = app.ui
|
||||||
|
app.run()
|
||||||
|
mock_db_instance.create.assert_called_once()
|
||||||
|
mock_ui_instance.run.assert_called_once()
|
||||||
|
|
||||||
|
@patch('pilgrim.application.UIApp')
|
||||||
|
@patch('pilgrim.application.ServiceManager')
|
||||||
|
@patch('pilgrim.application.Database')
|
||||||
|
@patch('pilgrim.application.ConfigManager')
|
||||||
|
def test_get_service_manager_creates_and_configures_new_instance(
|
||||||
|
MockConfigManager, MockDatabase, MockServiceManager, MockUIApp
|
||||||
|
):
|
||||||
|
app = Application()
|
||||||
|
mock_db_instance = app.database
|
||||||
|
fake_session = MagicMock()
|
||||||
|
mock_db_instance.session.return_value = fake_session
|
||||||
|
mock_db_instance.reset_mock()
|
||||||
|
MockServiceManager.reset_mock()
|
||||||
|
returned_manager = app.get_service_manager()
|
||||||
|
mock_db_instance.session.assert_called_once()
|
||||||
|
MockServiceManager.assert_called_once()
|
||||||
|
returned_manager.set_session.assert_called_once_with(fake_session)
|
||||||
|
|
||||||
|
assert returned_manager is MockServiceManager.return_value
|
||||||
Reference in New Issue
Block a user