8000 integration non existing · akshatz/firebase-admin-python@6ce5a78 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6ce5a78

Browse files
committed
integration non existing
1 parent 3aa3ea6 commit 6ce5a78

File tree

3 files changed

+45
-15
lines changed

3 files changed

+45
-15
lines changed

firebase_admin/dynamic_links.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,11 @@ def _get_link_service(app):
8383

8484

8585
class LinkStats(object):
86+
"""The LinkStats object is returned by get_link_stats, it contains a list of EventStats"""
8687
def __init__(self, event_stats):
87-
if not isinstance(event_stats, list):
88-
raise ValueError('Invalid data argument: {0}. Must be a list.'.format(event_stats))
88+
if not isinstance(event_stats, (list, tuple)):
89+
raise ValueError('Invalid data argument: {0}. Must be a list or tuple'
90+
.format(event_stats))
8991
if len(event_stats) > 0 and not isinstance(event_stats[0], EventStats):
9092
raise ValueError('Invalid data argument: elements of event stats must be' +
9193
' "EventStats", found{}'.format(type(event_stats[0])))

integration/test_dynamic_links.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@
2323

2424
from tests import testutils
2525

26-
class TestEndToEnd(object):
27-
def test_get_stats(self):
28-
try:
29-
dynamic_links_e2e_url = testutils.resource('dynamic_links_e2e_url.txt').strip()
30-
except IOError:
31-
sys.stderr.write("""
26+
dynamic_links_e2e_url = ''
27+
try:
28+
dynamic_links_e2e_url = testutils.resource('dynamic_links_e2e_url.txt').strip()
29+
except IOError:
30+
sys.stderr.write("""
3231
==============================================================================================
3332
To run end to end tests you must do the following:
3433
1. From the firebase console, create a short link under dynamic links.
@@ -37,12 +36,28 @@ def test_get_stats(self):
3736
e.g. $ echo "https://your1.app.goo.gl/suff" > tests/data/dynamic_links_e2e_url.txt
3837
===============================================================================================
3938
""")
39+
40+
class TestEndToEnd(object):
41+
"""Runs an end to end test, see comment string for setup."""
42+
43+
def test_get_stats(self):
44+
if(dynamic_links_e2e_url) == 0:
45+
return
4046
link_stats = dynamic_links.get_link_stats(
41-
dynamic_links_e2e_url
47+
dynamic_links_e2e_url,
4248
dynamic_links.StatOptions(duration_days=4000))
4349
assert isinstance(link_stats, dynamic_links.LinkStats)
4450
assert len(link_stats.event_stats) > 0
4551

52+
def test_get_stats_nonexistant_link(self):
53+
if(dynamic_links_e2e_url) == 0:
54+
return
55+
link_stats = dynamic_links.get_link_stats(
56+
dynamic_links_e2e_url + 'some_arbitary_unlikely_string_ZXCzxcASDasdQWEqwe',
57+
dynamic_links.StatOptions(duration_days=4000))
58+
assert isinstance(link_stats, dynamic_links.LinkStats)
59+
assert len(link_stats.event_stats) == 0
60+
4661
class TestServerErrors(object):
4762
def test_unautherized(self):
4863
with pytest.raises(requests.exceptions.HTTPError) as excinfo:

tests/test_dynamic_links.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232

3333
INVALID_STRINGS = [None, '', 0, 1, True, False, list(), tuple(), dict(), object()]
3434
INVALID_NON_NEGATIVE_NUMS = [None, '', 'foo', -1, True, False, list(), tuple(), dict(), object()]
35+
INVALID_LISTS = [None, 'foo', 0, 1, True, False, dict(), object()]
36+
3537

3638
class DLFixture(object):
3739
def __init__(self, name=None):
@@ -42,7 +44,6 @@ def __init__(self, name=None):
4244
self.links_service = dynamic_links._get_link_service(self.app)
4345

4446
def _instrument_dynamic_links(self, payload, status=200):
45-
4647
request_url = dynamic_links._LINKS_BASE_URL
4748
recorder = []
4849
self.links_service._client.session.mount(request_url,
@@ -70,7 +71,6 @@ def teardown_module():
7071
firebase_admin.delete_app(firebase_admin.get_app('testDLApp'))
7172

7273

73-
7474
class TestGetStats(object):
7575
def test_get_stats(self, dltest):
7676
dltest._instrument_dynamic_links(payload=MOCK_GET_STATS_RESPONSE)
@@ -103,23 +103,22 @@ def test_get_stats_invalid_url(self, dltest, invalid_url):
103103
with pytest.raises(ValueError) as excinfo:
104104
dynamic_links.get_link_stats(invalid_url, options, app=dltest.app)
105105
assert 'Url must be a string and begin with "https://".' in excinfo.value.message
106-
106+
107107
@pytest.mark.parametrize('invalid_options', INVALID_STRINGS)
108108
def test_get_stats_invalid_options(self, dltest, invalid_options):
109109
with pytest.raises(ValueError) as excinfo:
110110
dynamic_links.get_link_stats(_MOCK_SHORT_URL, invalid_options, app=dltest.app)
111111
assert 'Options must be of type StatOptions.' in excinfo.value.message
112-
112+
113113
@pytest.mark.parametrize('invalid_duration', [0] + INVALID_NON_NEGATIVE_NUMS)
114114
def test_get_stats_invalid_duration_days(self, dltest, invalid_duration):
115115
options = dynamic_links.StatOptions(duration_days=invalid_duration)
116116
with pytest.raises(ValueError) as excinfo:
117117
dynamic_links.get_link_stats(_MOCK_SHORT_URL, options, app=dltest.app)
118118
assert 'duration_days' in excinfo.value.message
119119
assert 'must be positive int' in excinfo.value.message
120-
121120

122-
121+
123122
class TestEventStats(object):
124123
@pytest.mark.parametrize('platform', dynamic_links.EventStats._platforms.keys())
125124
def test_valid_platform_values(self, platform):
@@ -189,3 +188,17 @@ def test_invalid_count_values(self, arg):
189188
event=dynamic_links.EVENT_TYPE_CLICK,
190189
count=arg)
191190
assert 'must be a non negative int' in excinfo.value.message
191+
192+
193+
class TestLinkStatsCreation(object):
194+
@pytest.mark.parametrize('arg', INVALID_LISTS)
195+
def test_invalid_event_stats_list(self, arg):
196+
with pytest.raises(ValueError) as excinfo:
197+
dynamic_links.LinkStats(arg)
198+
assert'Must be a list or tuple' in excinfo.value.message
199+
200+
@pytest.mark.parametrize('arg', [list([1,2]), list('asdf'), tuple([1,2])])
201+
def test_empty_event_stats_list(self, arg):
202+
with pytest.raises(ValueError) as excinfo:
203+
dynamic_links.LinkStats(arg)
204+
assert 'elements of event stats must be "EventStats"' in excinfo.value.message

0 commit comments

Comments
 (0)
0