From a8c989617a395c2c6b093b89667a38bf71f9dbde Mon Sep 17 00:00:00 2001 From: lauvwbk Date: Thu, 11 May 2023 21:28:10 +0200 Subject: [PATCH] #100 clean --- aircox/tests/conftest.py | 23 ++- aircox/tests/models/test_station.py | 255 +++++++++------------------- 2 files changed, 96 insertions(+), 182 deletions(-) diff --git a/aircox/tests/conftest.py b/aircox/tests/conftest.py index 4cbd7b1..f352e75 100644 --- a/aircox/tests/conftest.py +++ b/aircox/tests/conftest.py @@ -12,24 +12,29 @@ def stations(): return baker.make(models.Station, _quantity=2) -@pytest.fixture -def stations_without_default(): - return baker.make(models.Station, _quantity=3, default=False) - - @pytest.fixture def station_default(): return baker.make(models.Station, default=True) @pytest.fixture -def stations_inactive(): - return baker.make(models.Station, _quantity=3, active=False) +def station_active(): + return baker.make(models.Station, active=True) @pytest.fixture -def station_active(): - return baker.make(models.Station, active=True) +def ports(): + compatible_param = ( + [models.Port.TYPE_ICECAST, models.Port.DIRECTION_OUTPUT], + [models.Port.TYPE_FILE, models.Port.DIRECTION_OUTPUT], + [models.Port.TYPE_HTTP, models.Port.DIRECTION_INPUT], + [models.Port.TYPE_HTTPS, models.Port.DIRECTION_INPUT], + ) + items = [ + baker.make(models.Port, type=param[0], direction=param[1]) + for param in compatible_param + ] + return items @pytest.fixture diff --git a/aircox/tests/models/test_station.py b/aircox/tests/models/test_station.py index eee4ec6..ef7ee4d 100644 --- a/aircox/tests/models/test_station.py +++ b/aircox/tests/models/test_station.py @@ -1,229 +1,138 @@ import pytest - +import random from model_bakery import baker - from aircox.models import Station, Port - from aircox.conf import settings @pytest.mark.django_db -class TestStationQuerySet: +class TestStationQuerySet: # default method : not possible to have several stations by default. # default method : return a selected instance of station but do not save it. - def test_default_without_default_station(self, stations_without_default): - returned_station = Station.objects.default() + def test_default_without_default_station(self, stations): + for station in stations: + station.default = False + station.save() + assert Station.objects.default() is not None - assert returned_station is not None - assert returned_station == Station.objects.first() + def test_default_by_pk(self, stations): + for station in stations: + station.default = False + station.save() + assert Station.objects.default(station=stations[0].pk) == stations[0] - def test_default_with_pkargs_and_without_default_station( - self, stations_without_default - ): - station = stations_without_default[1] - returned_station = Station.objects.default( - station=station.pk - ) + def test_default_with_default_station(self, stations, station_default): + for station in stations: + station.default = False + station.save() + assert Station.objects.default() == station_default - assert station == returned_station - - def test_default_with_default_station( - self, station_default, stations_without_default - ): - returned_default_station = Station.objects.default() - - assert returned_default_station == station_default - - def test_default_with_pkargs_and_default_station( - self, station_default, stations_without_default - ): - returned_default_station = Station.objects.default( - station=station_default.pk - ) - - assert returned_default_station == station_default - - def test_active(self, station_active, stations_inactive): - filtered_active_station = Station.objects.active() - - assert station_active in filtered_active_station + def test_active(self, stations, station_active): + for station in stations: + station.active = False + station.save() + assert station not in Station.objects.active() + assert station_active in Station.objects.active() @pytest.mark.django_db class TestStation: def test_stream_field_filled(self, stations): streams_urls = "http://radiocampus.be/stream1.mp3\nhttp://radiocampus.be/stream2.mp3" - station = baker.make(Station, audio_streams=streams_urls) - - assert station.streams == [ + stations[0].audio_streams = streams_urls + assert stations[0].streams == [ "http://radiocampus.be/stream1.mp3", "http://radiocampus.be/stream2.mp3", ] def test_stream_field_empty(self, stations): - station = baker.make(Station, audio_streams=None) - - assert station.streams == [] + stations[0].audio_streams = None + assert stations[0].streams == [] def test__str__(self, stations): for station in stations: assert station.name == station.__str__() def test_save_without_path(self, stations): - station = baker.make(Station, path=None, slug="a-slug-with-dash") - station.save() - + stations[0].path = None + stations[0].slug = "a-slug-with-dash" + stations[0].save() assert ( - station.path + stations[0].path == settings.CONTROLLERS_WORKING_DIR + "\\a_slug_with_dash" ) def test_save_default_station_while_anotherone_is_default( - self, station_default, stations_without_default + self, stations, station_default ): - old_default_station = station_default - new_default_station = stations_without_default[1] - new_default_station.default = True - new_default_station.save() - old_default_station.refresh_from_db() - new_default_station.refresh_from_db() - + for station in stations: + station.default = False + station.save() + stations[0].default = True + stations[0].save() assert Station.objects.filter(default=True).count() == 1 - assert old_default_station.default is False - assert new_default_station.default is True + assert stations[0] in Station.objects.filter(default=True) @pytest.mark.django_db class TestPortQuerySet: - # issues with the preset incompatibility between port and direction. - # I need to control which type and direction for each fake model - # Otherwhise pytest fail randomly. - def test_active_value_true(self): - port1 = baker.make( - Port, - active=True, - type=Port.TYPE_ICECAST, - direction=Port.DIRECTION_OUTPUT, - ) - port2 = baker.make( - Port, - active=False, - type=Port.TYPE_ICECAST, - direction=Port.DIRECTION_OUTPUT, - ) - active_ports = Port.objects.active() + def test_active_value_true(self, ports): + for port in ports: + random_value = random.choice([True, False]) + port.active = random_value + port.save() + active_ports = Port.objects.active(value=True) + for port in active_ports: + assert port.active == True - assert port1 in active_ports - assert port2 not in active_ports + def test_active_value_false(self, ports): + for port in ports: + random_value = random.choice([True, False]) + port.active = random_value + port.save() + for port in Port.objects.active(value=False): + assert port.active == False - def test_active_value_false(self): - port1 = baker.make( - Port, - active=True, - type=Port.TYPE_ICECAST, - direction=Port.DIRECTION_OUTPUT, - ) - port2 = baker.make( - Port, - active=False, - type=Port.TYPE_ICECAST, - direction=Port.DIRECTION_OUTPUT, - ) + def test_output(self, ports): + for port in Port.objects.output(): + assert port.direction == Port.DIRECTION_OUTPUT - inactive_ports = Port.objects.active(value=False) - assert port1 not in inactive_ports - assert port2 in inactive_ports - - def test_output(self): - port1 = baker.make( - Port, type=Port.TYPE_ICECAST, direction=Port.DIRECTION_OUTPUT - ) - port2 = baker.make( - Port, type=Port.TYPE_HTTP, direction=Port.DIRECTION_INPUT - ) - - output_ports = Port.objects.output() - assert port1 in output_ports - assert port2 not in output_ports - - def test_input(self): - port1 = baker.make( - Port, type=Port.TYPE_ICECAST, direction=Port.DIRECTION_OUTPUT - ) - port2 = baker.make( - Port, type=Port.TYPE_HTTP, direction=Port.DIRECTION_INPUT - ) - - input_ports = Port.objects.input() - assert port1 not in input_ports - assert port2 in input_ports + def test_input(self, ports): + for port in Port.objects.input(): + assert port.direction == Port.DIRECTION_INPUT @pytest.mark.django_db class TestPort: - def test__str__(self): - port = baker.make( - Port, type=Port.TYPE_ICECAST, direction=Port.DIRECTION_OUTPUT - ) - assert port.__str__() == "output: icecast #1" + def test__str__(self, ports): + for port in ports: + if ( + port.type == Port.TYPE_ICECAST + and port.direction == Port.DIRECTION_OUTPUT + ): + assert port.__str__() == "output: icecast #1" - def test_is_valid_type_and_type_is_input(self): - porthttp = baker.make( - Port, type=Port.TYPE_HTTP, direction=Port.DIRECTION_INPUT - ) - porthttps = baker.make( - Port, type=Port.TYPE_HTTPS, direction=Port.DIRECTION_INPUT - ) + def test_is_valid_type_and_type_is_input(self, ports): + for port in ports: + if port.direction == Port.DIRECTION_INPUT: + assert port.is_valid_type() == True - assert porthttp.is_valid_type() == True - assert porthttps.is_valid_type() == True + def test_is_valid_type_and_type_is_not_input(self, ports): + for port in ports: + if port.direction == Port.DIRECTION_OUTPUT: + assert port.is_valid_type() == True - def test_is_valid_type_and_type_is_not_input(self): - porticecast = baker.make( - Port, type=Port.TYPE_ICECAST, direction=Port.DIRECTION_OUTPUT - ) - portfile = baker.make( - Port, type=Port.TYPE_FILE, direction=Port.DIRECTION_OUTPUT - ) + def test_save_with_valid_type_icecast_output(self, ports): + assert Port.objects.get(id=ports[0].id) is not None - assert porticecast.is_valid_type() == True - assert portfile.is_valid_type() == True + def test_save_with_valid_type_file_output(self, ports): + assert Port.objects.get(id=ports[1].id) is not None - def test_save_with_valid_type_icecast_output(self): - port = baker.make( - Port, type=Port.TYPE_ICECAST, direction=Port.DIRECTION_OUTPUT - ) - port.save() - saved_port = Port.objects.get(id=port.id) + def test_save_with_valid_type_http_input(self, ports): + assert Port.objects.get(id=ports[2].id) is not None - assert saved_port is not None - - def test_save_with_valid_type_file_output(self): - port = baker.make( - Port, type=Port.TYPE_FILE, direction=Port.DIRECTION_OUTPUT - ) - port.save() - saved_port = Port.objects.get(id=port.id) - - assert saved_port is not None - - def test_save_with_valid_type_http_input(self): - port = baker.make( - Port, type=Port.TYPE_HTTP, direction=Port.DIRECTION_INPUT - ) - port.save() - saved_port = Port.objects.get(id=port.id) - - assert saved_port is not None - - def test_save_with_valid_type_https_input(self): - port = baker.make( - Port, type=Port.TYPE_HTTPS, direction=Port.DIRECTION_INPUT - ) - port.save() - saved_port = Port.objects.get(id=port.id) - - assert saved_port is not None + def test_save_with_valid_type_https_input(self, ports): + assert Port.objects.get(id=ports[3].id) is not None def test_save_without_valid_type(self): with pytest.raises(ValueError):