# -*- coding: utf-8 -*- # # Copyright (C) 2015 lpschedule-generator contributors. See CONTRIBUTORS. # # This file is part of lpschedule-generator. # # lpschedule-generator is free software: you can redistribute it # and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # lpschedule-generator is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with lpschedule-generator (see COPYING). If not, see # . import json import os import pprint import mistune import mock from collections import OrderedDict from os import path from StringIO import StringIO from nose.tools import * from lps_gen import * class TestJSONUtils(object): """Class that tests json utils in `lps_gen` module. """ @classmethod def setup_class(self): """Runs before running any tests in this class.""" self.speakers_ids = OrderedDict({ unicode('Daniel Kahn Gillmor'): 'gillmor', unicode('Edward Snowden'): 'snowden', unicode('Richard Stallman'): 'stallman', unicode('Clara Snowden'): 'clara_snowden', unicode('Ludovic Courtès'): 'courtes', unicode('Jonas Öberg'): 'aberg', }) self.ids_filename = 'speakers.ids' self.speakers_noids = [ unicode('Daniel Kahn Gillmor'), unicode('Richard Stallman'), unicode('Ludovic Courtès'), unicode('Jonas Öberg'), ] self.noids_filename = 'speakers.noids' # Change current working directory to the tests directory. self.old_cwd = os.getcwd() os.chdir('tests') def setup(self): """Runs before each test in this class.""" pass def test_json_write(self): """Testing json_write function.""" json_write(self.ids_filename, self.speakers_ids) assert_equal(json.loads(read_file(self.ids_filename), object_pairs_hook=OrderedDict), self.speakers_ids) json_write(self.noids_filename, self.speakers_noids) assert_equal(json.loads(read_file(self.noids_filename), object_pairs_hook=OrderedDict), self.speakers_noids) def test_json_read(self): """Testing json_read function.""" write_file(self.ids_filename, json.dumps(self.speakers_ids, indent=4)) assert_equal(json_read(self.ids_filename), self.speakers_ids) write_file(self.noids_filename, json.dumps(self.speakers_noids, indent=4)) assert_equal(json_read(self.noids_filename), self.speakers_noids) def teardown(self): """Cleans up things after each test in this class.""" # Remove `speakers.ids` file if it exists. if path.isfile(self.ids_filename): os.remove(self.ids_filename) # Remove `speakers.noids` file if it exists. if path.isfile(self.noids_filename): os.remove(self.noids_filename) @classmethod def teardown_class(self): """Clean up the mess created by this test.""" # Change back to the old cwd os.chdir(self.old_cwd) class TestLPS(object): """ Class that tests everything related LP Schedule. """ @classmethod def setup_class(self): """Runs before running any tests in this class.""" self.MD_FILE = path.join('tests', 'files', 'lp-sch.md') self.MD_FILE_CONTENT = read_file(self.MD_FILE) self.SCH_TEMPLATE = path.join('tests', 'files', 'lp-sch-2016.jinja2') self.markdown = LPSMarkdown() self.lps_dict = self.markdown(self.MD_FILE_CONTENT) def setup(self): """Runs before each test in this class.""" pass def test_LPSMarkdown_day(self): """ Testing `LPSMarkdown` class - Day. """ days = ['Saturday, March 19', 'Sunday, March 20'] i = 0 for day in self.lps_dict.keys(): assert_equal(day, days[i]) i = i + 1 def test_LPSMarkdown_timeslot(self): """ Testing `LPSMarkdown` class - Timeslot. """ timeslots = [ '09:00 - 09:45: Registration and Breakfast', '09:45 - 10:45: Opening Keynote: Richard Stallman', '10:55 - 11:40: Session Block 1A', '11:40 - 11:50: Break', '11:50 - 12:35: Session Block 2A', '09:00 - 09:45: Registration and breakfast', '09:45 - 10:30: Keynote: Benjamin Mako Hill', '10:30 - 10:40: Break', '10:40 - 11:25: Session Block 1B', ] i = 0 for lps_timeslots in self.lps_dict.values(): for timeslot in lps_timeslots.keys(): assert_equal(timeslot, timeslots[i]) i = i + 1 def test_LPSMarkdown_session(self): """ Testing `LPSMarkdown` class - Session. """ sessions = [ 'Free software, free hardware, and other things', 'Federation and GNU', 'Dr. Hyde and Mr. Jekyll: advocating for free software in nonfree academic contexts', 'TAFTA, CETA, TISA: traps and threats to Free Software Everywhere', 'Let\'s encrypt!', 'Attribution revolution -- turning copyright upside-down', 'Access without empowerment', 'Fork and ignore: fighting a GPL violation by coding instead', 'Who did this? Just wait until your father gets home', ] i = 0 for lps_timeslots in self.lps_dict.values(): for lps_sessions in lps_timeslots.values(): for session in lps_sessions.keys(): assert_equal(session, sessions[i]) i = i + 1 def test_LPSMarkdown_speaker(self): """ Testing `LPSMarkdown` class - Speaker """ speakers = [ ['Richard Stallman'], ['Christopher Webber'], ['ginger coons'], ['Marianne Corvellec', 'Jonathan Le Lous'], ['Seth Schoen'], ['Jonas Öberg'], ['Benjamin Mako Hill'], ['Bradley Kuhn'], ['Ken Starks'], ] i = 0 for lps_timeslots in self.lps_dict.values(): for lps_sessions in lps_timeslots.values(): for session_info in lps_sessions.values(): assert_equal(session_info['speakers'], speakers[i]) i = i + 1 def test_LPSMarkdown_room(self): """ Testing `LPSMarkdown` class - Room """ rooms = [ 'Room 32-123', 'Room 32-123', 'Room 32-141', 'Room 32-155', 'Room 32-123', 'Room 32-141', 'Room 32-123', 'Room 32-123', 'Room 32-141', ] i = 0 for lps_timeslots in self.lps_dict.values(): for lps_sessions in lps_timeslots.values(): for session_info in lps_sessions.values(): assert_equal(session_info['room'], rooms[i]) i = i + 1 def test_RenderHTML(self): """Testing `RenderHTML` function with LP schedule """ lps_html = RenderHTML(self.lps_dict, self.SCH_TEMPLATE) print lps_html def test_RenderHTML_sessions_only(self): """Testing `RenderHTML` function - LP schedule - sessions only """ md_content = read_file(path.join('tests', 'files', 'lp-sch-sessions-only.md')) lps_html = RenderHTML(self.markdown(md_content), self.SCH_TEMPLATE) print lps_html @raises(SystemExit) def test_RenderHTML_nonexistent_template(self): """Testing `RenderHTML` function - LP schedule - ith non-existent template """ with mock.patch('sys.stdout', new_callable=StringIO) as out: nonexistent_template = 'lpsch-template.null' lps_html = RenderHTML(self.lps_dict, nonexistent_template) expected_out = 'Template %s not found.\n' % template_name assert out.getvalue() == expected_out def teardown(self): """Cleans up things after each test in this class.""" pass @classmethod def teardown_class(self): """Purge the mess created by this test.""" pass class TestLPSpeakers(object): """ Class that tests everything related LP Speakers """ @classmethod def setup_class(self): """Runs before running any tests in this class.""" # Change current working directory to the tests directory. self.old_cwd = os.getcwd() os.chdir('tests') self.MD_FILE = path.join('files', 'lp-speakers.md') self.MD_FILE_CONTENT = read_file(self.MD_FILE) self.SPEAKERS_TEMPLATE = path.join('files', 'lp-speakers-2016.jinja2') self.markdown = LPSpeakersMarkdown() self.lpspeakers_dict = self.markdown(self.MD_FILE_CONTENT) def setup(self): """Runs before each test in this class.""" pass def test_speakers_id_file_exists(self): """ Testing if LPSpeakersMardown created speakers.ids file. """ speakers_ids = self.markdown.speakers_renderer.speakers_ids assert path.isfile('speakers.ids') assert_equal(json_read('speakers.ids'), speakers_ids) def test_LPSpeakersMarkdown_keynotespeakers_name(self): """Testing LPSpeakersMarkdown keynote speakers' names. """ keynote_speakers = ['Daniel Kahn Gillmor', 'Edward Snowden', 'Richard Stallman', 'Clara Snowden', 'Ludovic Courtès'] i = 0 for kspeaker in self.lpspeakers_dict['keynote-speakers']: assert_equal(kspeaker['speaker'], keynote_speakers[i]) i = i + 1 def test_LPSpeakersMarkdown_keynotespeakers_id(self): """Testing LPSpeakersMarkdown keynote speakers' id. """ keynote_speaker_ids = ['gillmor', 'snowden', 'stallman', 'clara_snowden', 'courtes'] i = 0 for kspeaker in self.lpspeakers_dict['keynote-speakers']: assert_equal(kspeaker['id'], keynote_speaker_ids[i]) i = i + 1 def test_LPSpeakersMarkdown_keynotespeakers_imgurl(self): """Testing LPSpeakersMarkdown keynote speakers' image url. """ keynote_speaker_img_urls = ['//static.fsf.org/nosvn/libreplanet/speaker-pics/dkg.jpg', '//static.fsf.org/nosvn/libreplanet/speaker-pics/snowden.jpg', '//static.fsf.org/nosvn/libreplanet/speaker-pics/stallman.jpg', '//static.fsf.org/nosvn/libreplanet/speaker-pics/c_snowden.jpg'] i = 0 for kspeaker in self.lpspeakers_dict['keynote-speakers']: if kspeaker.has_key('img_url'): assert_equal(kspeaker['img_url'], keynote_speaker_img_urls[i]) i = i + 1 def test_LPSpeakersMarkdown_keynotespeakers_imgalt(self): """Testing LPSpeakersMarkdown keynote speakers' image alt text. """ keynote_speaker_img_alts = ['Daniel Kahn Gillmor - Photo', 'Edward Snowden - Photo', 'Richard Stallman - Photo', ''] i = 0 for kspeaker in self.lpspeakers_dict['keynote-speakers']: if kspeaker.has_key('img_alt'): assert_equal(kspeaker['img_alt'], keynote_speaker_img_alts[i]) i = i + 1 def test_LPSpeakersMarkdown_keynotespeakers_bio(self): """Testing LPSpeakersMarkdown keynote speakers' bio. """ keynote_speaker_bios = [['Daniel Kahn Gillmor is a technologist with the ACLU\'s Speech, Privacy'], ['Edward Snowden is a former intelligence officer who served the CIA,'], ['Richard is a software developer and software freedom activist. In 1983', 'Since the mid-1990s, Richard has spent most of his time in political',], [], ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam', 'Ut turpis felis, pulvinar a semper sed, adipiscing id']] i = 0 for kspeaker in self.lpspeakers_dict['keynote-speakers']: if kspeaker.has_key('bio'): j = 0 for p in kspeaker['bio']: p.startswith(keynote_speaker_bios[i][j]) j = j + 1 i = i + 1 def test_LPSpeakersMarkdown_speakers_name(self): """Testing LPSpeakersMarkdown speakers' names. """ speakers = ['Emmanuel', 'George Chriss', 'Marianne Corvellec', 'Richard Fontana', 'Mike Gerwitz', 'Bassam Kurdali', 'Jonathan Le Lous', 'M. C. McGrath', 'Deb Nicholson', 'Stefano Zacchiroli'] i = 0 for kspeaker in self.lpspeakers_dict['speakers']: assert_equal(kspeaker['speaker'], speakers[i]) i = i + 1 def test_LPSpeakersMarkdown_speakers_id(self): """Testing LPSpeakersMarkdown speakers' id. """ speaker_ids = ['emmanuel', 'chriss', 'corvellec', 'fontana', 'gerwitz', 'kurdali', 'lous', 'mcgrath', 'nicholson', 'zacchiroli'] i = 0 for kspeaker in self.lpspeakers_dict['speakers']: assert_equal(kspeaker['id'], speaker_ids[i]) i = i + 1 def test_LPSpeakersMarkdown_speakers_imgurl(self): """Testing LPSpeakersMarkdown speakers' image url. """ speaker_img_urls = ['', '', '//static.fsf.org/nosvn/libreplanet/speaker-pics/corvellec.jpg', '', '', '//static.fsf.org/nosvn/libreplanet/speaker-pics/kurdali.png', '//static.fsf.org/nosvn/libreplanet/speaker-pics/lelous.jpg', '', '//static.fsf.org/nosvn/libreplanet/speaker-pics/nicholson.jpg', '//static.fsf.org/nosvn/libreplanet/speaker-pics/zacchiroli.jpg'] i = 0 for kspeaker in self.lpspeakers_dict['speakers']: if kspeaker.has_key('img_url'): assert_equal(kspeaker['img_url'], speaker_img_urls[i]) i = i + 1 def test_LPSpeakersMarkdown_speakers_imgalt(self): """Testing LPSpeakersMarkdown speakers' image alt text. """ speaker_img_alts = ['', '', 'Marianne Corvellec - Photo', '', '', 'Bassam Kurdali - Photo', 'Jonathan Le Lous - Photo', '', 'Deb Nicholson - Photo', 'Stefano Zacchiroli - Photo'] i = 0 for kspeaker in self.lpspeakers_dict['speakers']: if kspeaker.has_key('img_alt'): assert_equal(kspeaker['img_alt'], speaker_img_alts[i]) i = i + 1 def test_LPSpeakersMarkdown_speakers_bio(self): """Testing LPSpeakersMarkdown speakers' bio. """ speaker_bios = [['Emmanuel is a Division III student at Hampshire College, studying how'], [], ['Marianne Corvellec has been a Free Software activist with April'], ['Richard Fontana is a lawyer at Red Hat. He leads support for Red Hat\'s'], [], ['Bassam is a 3D animator/filmmaker whose 2006 short, Elephants Dream,'], ['Jonathan has been involved with the Free Software Movement for ten'], ['M. C. is the founder of Transparency Toolkit, a free software project'], [], ['Stefano Zacchiroli is Associate Professor of Computer Science at']] i = 0 for kspeaker in self.lpspeakers_dict['speakers']: if kspeaker.has_key('bio'): j = 0 for p in kspeaker['bio']: p.startswith(speaker_bios[i][j]) j = j + 1 i = i + 1 def test_RenderHTML(self): """Testing `RenderHTML` function with LP speakers """ lps_html = RenderHTML(self.lpspeakers_dict, self.SPEAKERS_TEMPLATE) print lps_html def teardown(self): """Cleans up things after each test in this class.""" pass @classmethod def teardown_class(self): """Purge the mess created by this test.""" # Remove `speakers.ids` file if it exists. if path.isfile('speakers.ids'): os.remove('speakers.ids') # Change back to the old cwd os.chdir(self.old_cwd)