Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: cms/tests/test_page_outputs.py

Issue 29345468: Issue 4045 - Add Test Suite To CMS (Closed)
Patch Set: Cosolidated test code Created July 12, 2016, 1:43 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cms/tests/test_page_outputs.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/cms/tests/test_page_outputs.py
@@ -0,0 +1,80 @@
+import os
+import sys
+import shutil
+import time
+import runpy
+import pytest
+import urllib2
+import subprocess
+
+ROOTPATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+def get_expected_outputs():
+ return_data = {}
+ expected_out_path = os.path.join(ROOTPATH, 'tests', 'expected_output')
+ for (dirpath, dirnames, filenames) in os.walk(expected_out_path):
Vasily Kuznetsov 2016/07/12 15:25:11 You actually don't need the parentheses around `di
+ for output_file in filenames:
+ with open('{}/{}'.format(dirpath, output_file)) as f:
Vasily Kuznetsov 2016/07/12 15:25:11 Here it's also better to use `os.path.join`.
+ return_data[output_file] = f.read()
+ return return_data
+
+expected_outputs = get_expected_outputs()
+
+
+@pytest.fixture(scope='session')
+def temp_site(tmpdir_factory):
+ site_dir = tmpdir_factory.mktemp('temp_out')
Vasily Kuznetsov 2016/07/12 15:25:11 Maybe better call this `out_dir`. Otherwise `site_
+
+ site_dir = site_dir.join('test_site').strpath
+ shutil.copytree(os.path.join(ROOTPATH, 'tests', 'test_site'), site_dir)
+ subprocess.check_call(['hg', 'init', site_dir])
+ subprocess.check_call(
Vasily Kuznetsov 2016/07/12 15:25:10 This call seems to fit on one line, so there's no
+ [
+ 'hg', '-R', site_dir,
+ 'commit', '-A', '-m', 'foo',
+ ]
+ )
+ return site_dir
+
+
+@pytest.fixture(scope='session')
+def static_output(request, temp_site):
+ static_out_path = os.path.join(temp_site, 'static_out')
+ sys.argv = ['filler', temp_site, static_out_path]
+
+ runpy.run_module(
Vasily Kuznetsov 2016/07/12 15:25:12 This one also fits on one line.
+ 'cms.bin.generate_static_pages', run_name='__main__'
+ )
+ return static_out_path
+
+
+@pytest.fixture(scope='session')
Vasily Kuznetsov 2016/07/12 15:25:12 It seems that with current default version of pyte
Jon Sonesen 2016/07/18 14:48:27 It works but I believe I am still using the pytest
+def dynamic_server(temp_site):
+ p = subprocess.Popen(
Vasily Kuznetsov 2016/07/12 15:25:11 This also fits on one line.
+ ['python', 'runserver.py', temp_site]
+ )
+ time.sleep(0.5)
+ yield 'http://localhost:5000/root/'
+ p.terminate()
+
+
+@pytest.fixture(scope='session')
+def output_pages(static_output):
+ return_data = {}
+ for (dirpath, dirnames, filenames) in os.walk(static_output):
Vasily Kuznetsov 2016/07/12 15:25:12 This code seems to be duplicated from `get_expecte
+ for output_file in filenames:
+ with open('{}/{}'.format(dirpath, output_file)) as f:
+ return_data[output_file] = f.read()
+ return return_data
+
+
+@pytest.mark.parametrize('filename,expected_output', expected_outputs.items())
Vasily Kuznetsov 2016/07/12 15:25:10 It seems that we're not using `expected_output` as
+def test_static(output_pages, filename, expected_output):
+ assert output_pages[filename] == expected_output
+
+
+@pytest.mark.parametrize('filename,expected_output', expected_outputs.items())
+def test_dynamic(dynamic_server, filename, expected_output):
+ response = urllib2.urlopen(dynamic_server + filename)
+ assert response.read() == expected_output

Powered by Google App Engine
This is Rietveld