#100: Test model station #104
@ -12,6 +12,31 @@ def stations():
 | 
			
		||||
    return baker.make(models.Station, _quantity=2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
def station_default():
 | 
			
		||||
    return baker.make(models.Station, default=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
def station_active():
 | 
			
		||||
    return baker.make(models.Station, active=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
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
 | 
			
		||||
def programs(stations):
 | 
			
		||||
    items = list(
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										141
									
								
								aircox/tests/models/test_station.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								aircox/tests/models/test_station.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,141 @@
 | 
			
		||||
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:
 | 
			
		||||
    # 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):
 | 
			
		||||
        for station in stations:
 | 
			
		||||
            station.default = False
 | 
			
		||||
            station.save()
 | 
			
		||||
        assert Station.objects.default() is not None
 | 
			
		||||
 | 
			
		||||
    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_default_station(self, stations, station_default):
 | 
			
		||||
        for station in stations:
 | 
			
		||||
            station.default = False
 | 
			
		||||
            station.save()
 | 
			
		||||
        assert Station.objects.default() == station_default
 | 
			
		||||
 | 
			
		||||
    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"
 | 
			
		||||
        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):
 | 
			
		||||
        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):
 | 
			
		||||
        stations[0].path = None
 | 
			
		||||
        stations[0].slug = "a-slug-with-dash"
 | 
			
		||||
        stations[0].save()
 | 
			
		||||
        assert (
 | 
			
		||||
            stations[0].path
 | 
			
		||||
            == settings.CONTROLLERS_WORKING_DIR + "\\a_slug_with_dash"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_save_default_station_while_anotherone_is_default(
 | 
			
		||||
        self, stations, station_default
 | 
			
		||||
    ):
 | 
			
		||||
        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 stations[0] in Station.objects.filter(default=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.django_db
 | 
			
		||||
class TestPortQuerySet:
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    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_output(self, ports):
 | 
			
		||||
        for port in Port.objects.output():
 | 
			
		||||
            assert port.direction == Port.DIRECTION_OUTPUT
 | 
			
		||||
 | 
			
		||||
    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, 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, ports):
 | 
			
		||||
        for port in ports:
 | 
			
		||||
            if port.direction == Port.DIRECTION_INPUT:
 | 
			
		||||
                assert port.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_save_with_valid_type_icecast_output(self, ports):
 | 
			
		||||
        assert Port.objects.get(id=ports[0].id) is not None
 | 
			
		||||
 | 
			
		||||
    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_http_input(self, ports):
 | 
			
		||||
        assert Port.objects.get(id=ports[2].id) 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):
 | 
			
		||||
            baker.make(
 | 
			
		||||
                Port, type=Port.TYPE_HTTP, direction=Port.DIRECTION_OUTPUT
 | 
			
		||||
            )
 | 
			
		||||
		Reference in New Issue
	
	Block a user