2018-01-02 08:58:16 +01:00
import pytest
from httmock import HTTMock , all_requests
2022-03-18 09:46:37 +01:00
import tests . utils
2018-01-02 08:58:16 +01:00
from passerelle . apps . feeds . models import Feed
2022-03-17 16:54:24 +01:00
FEED_EXAMPLE = """ <?xml version= " 1.0 " encoding= " UTF-8 " ?>
2018-01-02 08:58:16 +01:00
< feed xmlns = " http://www.w3.org/2005/Atom " xmlns : rdf = " http://www.w3.org/1999/02/22-rdf-syntax-ns# " xmlns : sy = " http://purl.org/rss/1.0/modules/syndication/ " xmlns : dc = " http://purl.org/dc/elements/1.1/ " xmlns : taxo = " http://purl.org/rss/1.0/modules/taxonomy/ " >
< title > Actualités de Strasbourg < / title >
< link rel = " alternate " href = " http://www.strasbourg.eu/fr/actualites/-/asset_publisher/lG7u/rss " / >
< subtitle > Actualités de Strasbourg < / subtitle >
< entry >
< title > 30 juin - 1 er juillet : conditions de circulation et de stationnement < / title >
< link rel = " alternate " href = " http://www.strasbourg.eu/fr/actualites/-/asset_publisher/lG7u/content/id/5722879 " / >
< author >
< name > Ville et Eurométropole de Strasbourg < / name >
< / author >
< id > http : / / www . strasbourg . eu / fr / actualites / - / asset_publisher / lG7u / content / id / 5722879 < / id >
< updated > 2017 - 06 - 29 T17 : 19 : 05 Z < / updated >
< published > 2017 - 06 - 29 T16 : 46 : 24 Z < / published >
< summary type = " html " > & lt ; img src = ' http://media.strasbourg.eu/alfresco/d/d/workspace/SpacesStore/8a6e5fa7-a0be-4287-8034-eed14e86df39/Plan_Parlement.jpg ' / & gt ; & lt ; div & gt ; Dans le cadre de la cérémonie d ' hommage à Helmut Kohl au Parlement européen, prenez connaissance du dispositif de sécurité mis en place avec notamment des restrictions de circulation et de stationnement le vendredi 30 juin et le samedi 1er juillet.</div></summary>
< dc : creator > Ville et Eurométropole de Strasbourg < / dc : creator >
< dc : date > 2017 - 06 - 29 T16 : 46 : 24 Z < / dc : date >
< / entry >
< entry >
< title > A noter cette semaine : circulation , travaux , services publics , événements < / title >
< link rel = " alternate " href = " http://www.strasbourg.eu/fr/actualites/-/asset_publisher/lG7u/content/id/5715308 " / >
< author >
< name > Ville et Eurométropole de Strasbourg < / name >
< / author >
< id > http : / / www . strasbourg . eu / fr / actualites / - / asset_publisher / lG7u / content / id / 5715308 < / id >
< updated > 2017 - 06 - 29 T12 : 37 : 41 Z < / updated >
< published > 2017 - 06 - 26 T07 : 33 : 59 Z < / published >
< summary type = " html " > & lt ; img src = ' http://media.strasbourg.eu/alfresco/d/d/workspace/SpacesStore/6f54e4f0-5c63-4b80-b2c2-df7afc7d213e/vue_de_Strasbourg.jpg ' / & gt ; & lt ; div & gt ; Informations utiles à savoir du 26 juin au 3 juillet 2017 & lt ; / div & gt ; < / summary >
< dc : creator > Ville et Eurométropole de Strasbourg < / dc : creator >
< dc : date > 2017 - 06 - 26 T07 : 33 : 59 Z < / dc : date >
< / entry >
< / feed > """
@pytest.fixture
def connector ( db ) :
2022-03-18 09:46:37 +01:00
return tests . utils . setup_access_rights ( Feed . objects . create ( slug = ' test ' , url = ' http://example.net/ ' ) )
2018-01-02 08:58:16 +01:00
2021-02-20 16:26:01 +01:00
2018-01-02 08:58:16 +01:00
@all_requests
def up_mock ( url , request ) :
2018-06-18 12:39:40 +02:00
return { ' status_code ' : 200 , ' content ' : FEED_EXAMPLE , ' request ' : request }
2018-01-02 08:58:16 +01:00
2021-02-20 16:26:01 +01:00
2018-01-02 08:58:16 +01:00
@all_requests
def down_mock ( url , request ) :
return { ' status_code ' : 404 , ' content ' : ' down ' , ' request ' : request }
2021-02-20 16:26:01 +01:00
2018-01-02 08:58:16 +01:00
@all_requests
def down_500_mock ( url , request ) :
return { ' status_code ' : 500 , ' content ' : ' down ' , ' request ' : request }
2021-02-20 16:26:01 +01:00
2018-01-02 08:58:16 +01:00
def test_feed_availability ( app , connector ) :
2018-08-13 14:45:24 +02:00
assert connector . get_availability_status ( ) is None
2018-01-02 08:58:16 +01:00
with HTTMock ( up_mock ) :
connector . availability ( )
2018-08-13 14:45:24 +02:00
assert connector . get_availability_status ( ) . up ( )
2018-01-02 08:58:16 +01:00
with HTTMock ( down_mock ) :
connector . availability ( )
2018-08-13 14:45:24 +02:00
assert connector . get_availability_status ( ) . down ( )
assert ' 404 ' in connector . get_availability_status ( ) . message
2018-01-02 08:58:16 +01:00
with HTTMock ( down_500_mock ) :
connector . availability ( )
2018-08-13 14:45:24 +02:00
assert connector . get_availability_status ( ) . down ( )
assert ' 500 ' in connector . get_availability_status ( ) . message
2019-01-22 14:34:56 +01:00
def test_availability_checks_disabled ( app , connector ) :
with HTTMock ( up_mock ) :
connector . availability ( )
assert connector . get_availability_status ( ) . up ( )
av = connector . availability_parameters
av . run_check = False
av . save ( )
with HTTMock ( down_mock ) :
connector . availability ( )
assert connector . get_availability_status ( ) . up ( )
av . run_check = True
av . save ( )
with HTTMock ( down_mock ) :
connector . availability ( )
assert connector . get_availability_status ( ) . down ( )