You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by cr...@apache.org on 2017/09/21 17:26:57 UTC
[2/2] incubator-airflow git commit: [AIRFLOW-1621] Add tests for
server side paging
[AIRFLOW-1621] Add tests for server side paging
Adding tests to check logic included in
AIRFLOW-1519.
Closes #2614 from edgarRd/erod-ui-dags-paging-
tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-airflow/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-airflow/commit/8de9fde7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-airflow/tree/8de9fde7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-airflow/diff/8de9fde7
Branch: refs/heads/v1-9-test
Commit: 8de9fde71a86721a2c7215d0e25c0b24d37e4067
Parents: d7d7ce1
Author: Edgar Rodriguez <ed...@airbnb.com>
Authored: Tue Sep 19 15:52:26 2017 -0700
Committer: Chris Riccomini <cr...@apache.org>
Committed: Thu Sep 21 10:26:33 2017 -0700
----------------------------------------------------------------------
airflow/www/utils.py | 26 ++++++++--------
tests/www/test_utils.py | 73 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 87 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/8de9fde7/airflow/www/utils.py
----------------------------------------------------------------------
diff --git a/airflow/www/utils.py b/airflow/www/utils.py
index 344a4e9..96293a2 100644
--- a/airflow/www/utils.py
+++ b/airflow/www/utils.py
@@ -76,6 +76,20 @@ class DataProfilingMixin(object):
)
+def get_params(**kwargs):
+ params = []
+ for k, v in kwargs.items():
+ if k == 'showPaused':
+ # True is default or None
+ if v or v is None:
+ continue
+ params.append('{}={}'.format(k, v))
+ elif v:
+ params.append('{}={}'.format(k, v))
+ params = sorted(params, key=lambda x: x.split('=')[0])
+ return '&'.join(params)
+
+
def generate_pages(current_page, num_of_pages,
search=None, showPaused=None, window=7):
"""
@@ -103,18 +117,6 @@ def generate_pages(current_page, num_of_pages,
the HTML string of the paging component
"""
- def get_params(**kwargs):
- params = []
- for k, v in kwargs.items():
- if k == 'showPaused':
- # True is default or None
- if v or v is None:
- continue
- params.append('{}={}'.format(k, v))
- elif v:
- params.append('{}={}'.format(k, v))
- return '&'.join(params)
-
void_link = 'javascript:void(0)'
first_node = """<li class="paginate_button {disabled}" id="dags_first">
<a href="{href_link}" aria-controls="dags" data-dt-idx="0" tabindex="0">«</a>
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/8de9fde7/tests/www/test_utils.py
----------------------------------------------------------------------
diff --git a/tests/www/test_utils.py b/tests/www/test_utils.py
index bb0860f..d13a49d 100644
--- a/tests/www/test_utils.py
+++ b/tests/www/test_utils.py
@@ -13,6 +13,7 @@
# limitations under the License.
import unittest
+from xml.dom import minidom
from airflow.www import utils
@@ -31,6 +32,78 @@ class UtilsTest(unittest.TestCase):
def test_sensitive_variable_should_be_hidden_ic(self):
self.assertTrue(utils.should_hide_value_for_key("GOOGLE_API_KEY"))
+ def check_generate_pages_html(self, current_page, total_pages,
+ window=7, check_middle=False):
+ extra_links = 4 # first, prev, next, last
+ html_str = utils.generate_pages(current_page, total_pages)
+
+ # dom parser has issues with special « and »
+ html_str = html_str.replace('«', '')
+ html_str = html_str.replace('»', '')
+ dom = minidom.parseString(html_str)
+ self.assertIsNotNone(dom)
+
+ ulist = dom.getElementsByTagName('ul')[0]
+ ulist_items = ulist.getElementsByTagName('li')
+ self.assertEqual(min(window, total_pages) + extra_links, len(ulist_items))
+
+ def get_text(nodelist):
+ rc = []
+ for node in nodelist:
+ if node.nodeType == node.TEXT_NODE:
+ rc.append(node.data)
+ return ''.join(rc)
+
+ page_items = ulist_items[2:-2]
+ mid = int(len(page_items) / 2)
+ for i, item in enumerate(page_items):
+ a_node = item.getElementsByTagName('a')[0]
+ href_link = a_node.getAttribute('href')
+ node_text = get_text(a_node.childNodes)
+ if node_text == str(current_page + 1):
+ if check_middle:
+ self.assertEqual(mid, i)
+ self.assertEqual('javascript:void(0)', a_node.getAttribute('href'))
+ self.assertIn('active', item.getAttribute('class'))
+ else:
+ link_str = '?page=' + str(int(node_text) - 1)
+ self.assertEqual(link_str, href_link)
+
+ def test_generate_pager_current_start(self):
+ self.check_generate_pages_html(current_page=0,
+ total_pages=6)
+
+ def test_generate_pager_current_middle(self):
+ self.check_generate_pages_html(current_page=10,
+ total_pages=20,
+ check_middle=True)
+
+ def test_generate_pager_current_end(self):
+ self.check_generate_pages_html(current_page=38,
+ total_pages=39)
+
+ def test_params_no_values(self):
+ """Should return an empty string if no params are passed"""
+ self.assertEquals('', utils.get_params())
+
+ def test_params_search(self):
+ self.assertEqual('search=bash_',
+ utils.get_params(search='bash_'))
+
+ def test_params_showPaused_true(self):
+ """Should detect True as default for showPaused"""
+ self.assertEqual('',
+ utils.get_params(showPaused=True))
+
+ def test_params_showPaused_false(self):
+ self.assertEqual('showPaused=False',
+ utils.get_params(showPaused=False))
+
+ def test_params_all(self):
+ """Should return params string ordered by param key"""
+ self.assertEqual('page=3&search=bash_&showPaused=False',
+ utils.get_params(showPaused=False, page=3, search='bash_'))
+
if __name__ == '__main__':
unittest.main()