Exemplo n.º 1
0
async def test_selectcomp_view_existing(storage_dir, activity_testbed) -> None:
    # GIVEN

    details_screen = activity_testbed.mock(
        "compman.ui.compdetails.CompetitionDetailsScreen")

    storage.save_competition(storage.StoredCompetition("one", title="One"))
    storage.save_competition(storage.StoredCompetition("two", title="Two"))

    # WHEN
    async with activity_testbed.shown(SelectCompetitionScreen) as act:
        content = activity_testbed.render()

        assert "One" in content
        assert "Two" in content
        focus = activity_testbed.get_focus_widgets()[-1]
        assert focus.get_label() == "One"

        await activity_testbed.keypress("enter")

        # THEN
        selected = act.response.result()
        assert selected.id == "one"

        settings = storage.get_settings()
        assert settings.current_competition_id == "one"
Exemplo n.º 2
0
async def test_soaringspot_existing(storage_dir: str,
                                    soaringspot: SoaringSpotFixture,
                                    activity_testbed: ActivityTestbed) -> None:
    # GIVEN
    storage.save_competition(storage.StoredCompetition(id="one", title="One"))

    soaringspot.competitions = [
        SoaringSpotContest(
            id="one",
            href="http://soaringspot.local/one",
            title="One",
            description="First contest",
        ),
        SoaringSpotContest(
            id="two",
            href="http://soaringspot.local/two",
            title="Two",
            description="Second contest",
        ),
    ]

    # WHEN
    async with activity_testbed.shown(SoaringSpotPickerScreen):
        await activity_testbed.gather_tasks()
        focused = activity_testbed.get_focus_widgets()[-1]
        assert focused.get_label() == "One"
        assert "First contest" in activity_testbed.render()
        await activity_testbed.keypress("enter")

        # THEN
        res = await activity_testbed.response()
        assert isinstance(res, storage.StoredCompetition)
        assert res.id == "one"
        assert res.title == "One"
        assert res.soaringspot_url == "http://soaringspot.local/one"
Exemplo n.º 3
0
 def _on_waypoint_changed(self, ev, new_state, selected):
     if not new_state:
         return
     self.competition.waypoints = selected
     storage.save_competition(self.competition)
     self._udpate_xcsoar_config(self.competition)
     self.status.flash(f"Waypoint changed to: {selected}")
Exemplo n.º 4
0
 def _on_airspace_changed(self, ev, new_state, selected):
     if not new_state:
         return
     self.competition.airspace = selected
     storage.save_competition(self.competition)
     self._udpate_xcsoar_config(self.competition)
     self.status.flash(f"Airspace changed to: {selected}")
Exemplo n.º 5
0
async def test_mainmenu_details(storage_dir, activity_testbed) -> None:
    # GIVEN
    welcome_screen = activity_testbed.mock("compman.ui.welcome.WelcomeScreen")
    details_screen = activity_testbed.mock(
        "compman.ui.compdetails.CompetitionDetailsScreen")

    async with activity_testbed.shown(MainMenuScreen):
        # WHEN
        await asyncio.sleep(0)
        assert welcome_screen.shown

        comp = storage.StoredCompetition("test", "Test competition")
        storage.save_competition(comp)
        settings = storage.get_settings()
        settings.current_competition_id = comp.id

        await activity_testbed.keypress("esc")

        contents = activity_testbed.render()
        assert "Current Competition" in contents

        focused = activity_testbed.get_focus_widgets()[-1]
        assert focused.get_label() == "Current Competition"
        await activity_testbed.keypress("enter")

        # THEN
        assert details_screen.shown
Exemplo n.º 6
0
    def _on_class_selected(self, ev, new_state, new_class):
        if new_state:
            self._comp.selected_class = new_class
            storage.save_competition(self._comp)
            self._emit("change", new_class)

            wdg = self._create_class_display()
            self.container.original_widget = wdg
Exemplo n.º 7
0
def _setup_test_comp() -> storage.StoredCompetition:
    comp = storage.StoredCompetition(
        id="test",
        title="Test Competition",
        soaringspot_url="https://soaringspot.local/test",
    )
    storage.save_competition(comp, set_current=True)
    return comp
Exemplo n.º 8
0
def sample_competition(storage_dir):
    comp = storage.StoredCompetition("test", "Test competition")
    storage.save_competition(comp)
    settings = storage.get_settings()
    settings.current_competition_id = comp.id
    storage.save_settings()
    try:
        yield comp
    finally:
        settings.current_competition_id = None
        storage.save_settings()
        storage.delete_competition(comp.id)
Exemplo n.º 9
0
def test_get_waypoint_files(storage_dir) -> None:
    # GIVEN
    comp = storage.StoredCompetition(id="first", title="First Competition")
    storage.save_competition(comp)

    # WHEN
    storage.store_file("first", "waypoint.cup", io.BytesIO(b"test"))

    files = storage.get_waypoint_files("first")
    assert [f.name for f in files] == ["waypoint.cup"]
    files = storage.get_airspace_files("first")
    assert files == []
Exemplo n.º 10
0
 def _on_competition_selected(
         self, btn: urwid.Widget,
         sscomp: soaringspot.SoaringSpotContest) -> None:
     comp = storage.load_competition(sscomp.id)
     if comp is not None:
         comp.title = sscomp.title
         comp.soaringspot_url = sscomp.href
     else:
         comp = storage.StoredCompetition(id=sscomp.id,
                                          title=sscomp.title,
                                          soaringspot_url=sscomp.href)
     storage.save_competition(comp)
     self._emit("select", comp)
Exemplo n.º 11
0
def test_save_competition(storage_dir) -> None:
    # GIVEN
    comp = storage.StoredCompetition(
        id="first",
        title="First Competition",
        soaringspot_url="http://localhost",
        airspace="airspace.txt",
        waypoints="waypoints.txt",
    )

    # WHEN
    storage.save_competition(comp)

    # THEN
    comps = storage.list_competitions()
    assert [c.id for c in comps] == ["first"]
Exemplo n.º 12
0
def test_load_competition_existing(storage_dir) -> None:
    # GIVEN
    comp = storage.StoredCompetition(
        id="first",
        title="First Competition",
        soaringspot_url="http://localhost",
        airspace="airspace.txt",
        waypoints=None,
    )
    storage.save_competition(comp)

    # WHEN
    loaded = storage.load_competition("first")
    assert loaded is not None

    # THEN
    assert loaded.id == "first"
    assert loaded.title == "First Competition"
    assert loaded.soaringspot_url == "http://localhost"
    assert loaded.airspace == "airspace.txt"
    assert loaded.waypoints == None
Exemplo n.º 13
0
    async def _update_classes(self) -> None:
        if self._comp.soaringspot_url is None:
            return
        self.status.set_text(("progress", "Fetching competition classes..."))
        try:
            classes = await soaringspot.fetch_classes(self._comp.soaringspot_url)
        except soaringspot.SoaringSpotClientError as e:
            self.status.set_text(
                ("error message", f"Error fetching competition classes: {e}")
            )
            log.exception("Error fetching competition classes")
            return

        self._comp.classes = classes
        storage.save_competition(self._comp)
        self._populate_class_radios()
        if classes:
            self.status.set_text("Pick your competition class:")
        else:
            self.status.set_text(
                ("remark", "No classes available for this competition")
            )
Exemplo n.º 14
0
 def _on_profile_changed(self, ev, selected, profile: str) -> None:
     if selected:
         self.competition.add_profile(profile)
     else:
         self.competition.remove_profile(profile)
     storage.save_competition(self.competition)