def setup(self):

        self.api = slumber.API(self.api_url, append_slash=False)

        # create directories with images, some with correct keywords
        for directory, test_page_name in zip(self.test_directories,
                                             self.test_page_names):
            file_names = os.listdir(directory)
            for file_name in file_names:
                if True in [file_name.endswith(ext) for ext in
                            ImageUploader._file_extensions]:
                    metadata = GExiv2.Metadata(os.path.join(directory,
                                                            file_name))
                    if '-with-' in file_name:
                        keywords = [self.main_keyword, 'page:' +
                                    test_page_name]
                        metadata.set_tag_multiple('Iptc.Application2.Keywords',
                                                keywords)
                        print('Added keywords {} to {}.'.format(keywords,
                                                                file_name))
                    metadata['Exif.Image.Orientation'] = '1'
                    metadata['Iptc.Application2.Caption'] = self.caption
                    # TODO : add a 'template:<template name>' tag to one of
                    # the files to test if it get's noticed.
                    metadata.save_file()

        # delete any files/pages that may have been leftover from previous
        # tests
        self.delete_server_side()

        # create a test page that doesn't have the images on it
        page_dict = {"content": "<p>The Existing Upload Test Page.</p>",
                     "name": self.test_page_names[0],
                     }

        self.api.page.post(page_dict, username=self.user_name,
                           api_key=self.api_key)
        print('Created {} on the server.'.format(self.test_page_names[0]))

        test_page_slug = self.api.page(page_dict['name']).get()['slug']

        file_path = os.path.join(self.test_directories[0],
                                 self.test_files[0][0])
        with open(file_path, 'r') as f:
            self.api.file.post({'name': os.path.split(file_path)[1],
                                'slug': test_page_slug}, files={'file': f},
                               username=self.user_name,
                               api_key=self.api_key)
        print('Added {} to {}.'.format(file_path, self.test_page_names[0]))

        # TODO : create some images with the Exif such that the images have
        # to be rotated before upload.

        self.uploader = ImageUploader(self.api_url,
                                      user_name=self.user_name,
                                      api_key=self.api_key)
    def setup(self):

        self.api = slumber.API(self.api_url, append_slash=False)

        # create directories with images, some with correct keywords
        for directory, test_page_name in zip(self.test_directories,
                                             self.test_page_names):
            file_names = os.listdir(directory)
            for file_name in file_names:
                if True in [
                        file_name.endswith(ext)
                        for ext in ImageUploader._file_extensions
                ]:
                    metadata = GExiv2.Metadata(
                        os.path.join(directory, file_name))
                    if '-with-' in file_name:
                        keywords = [
                            self.main_keyword, 'page:' + test_page_name
                        ]
                        metadata.set_tag_multiple('Iptc.Application2.Keywords',
                                                  keywords)
                        print('Added keywords {} to {}.'.format(
                            keywords, file_name))
                    metadata['Exif.Image.Orientation'] = '1'
                    metadata['Iptc.Application2.Caption'] = self.caption
                    # TODO : add a 'template:<template name>' tag to one of
                    # the files to test if it get's noticed.
                    metadata.save_file()

        # delete any files/pages that may have been leftover from previous
        # tests
        self.delete_server_side()

        # create a test page that doesn't have the images on it
        page_dict = {
            "content": "<p>The Existing Upload Test Page.</p>",
            "name": self.test_page_names[0],
        }

        self.api.page.post(page_dict,
                           username=self.user_name,
                           api_key=self.api_key)
        print('Created {} on the server.'.format(self.test_page_names[0]))

        test_page_slug = self.api.page(page_dict['name']).get()['slug']

        file_path = os.path.join(self.test_directories[0],
                                 self.test_files[0][0])
        with open(file_path, 'r') as f:
            self.api.file.post(
                {
                    'name': os.path.split(file_path)[1],
                    'slug': test_page_slug
                },
                files={'file': f},
                username=self.user_name,
                api_key=self.api_key)
        print('Added {} to {}.'.format(file_path, self.test_page_names[0]))

        # TODO : create some images with the Exif such that the images have
        # to be rotated before upload.

        self.uploader = ImageUploader(self.api_url,
                                      user_name=self.user_name,
                                      api_key=self.api_key)
class TestUploadWiki():

    config = ConfigParser.ConfigParser()
    config.read('test.cfg')
    api_url = config.get('localwiki', 'api_url')
    user_name = config.get('localwiki', 'user_name')
    api_key = config.get('localwiki', 'api_key')
    main_keyword = config.get('localwiki', 'main_keyword')

    test_page_names = ['Existing Upload Test Page',
                       'Non Existing Upload Test Page']

    test_directories = ['test-dir-01', 'test-dir-02']

    test_files = [['photo-with-tags-01.jpg',
                   'photo-with-tags-01.png'],
                  ['photo-with-tags-02.jpg',
                   'photo-with-tags-02.png']]

    caption = 'The cool caption.'

    def delete_server_side(self):
        """Deletes the files from the test pages and then the pages
        themselves."""

        # the server
        for page_name in self.test_page_names + ['This Page Does Not Exist']:
            try:
                self.api.page(page_name).get()
            except slumber.exceptions.HttpClientError:
                pass
            else:
                files = self.api.file.get(slug=page_name.lower())['objects']
                for f in files:
                    self.api.file(f['id']).delete(username=self.user_name,
                                                  api_key=self.api_key)
                    print("Deleted {} from {} on the server.".format(
                        f['name'], page_name))
                self.api.page(page_name).delete(username=self.user_name,
                                                api_key=self.api_key)
                print("Deleted {} from the server".format(page_name))

    def setup(self):

        self.api = slumber.API(self.api_url, append_slash=False)

        # create directories with images, some with correct keywords
        for directory, test_page_name in zip(self.test_directories,
                                             self.test_page_names):
            file_names = os.listdir(directory)
            for file_name in file_names:
                if True in [file_name.endswith(ext) for ext in
                            ImageUploader._file_extensions]:
                    metadata = GExiv2.Metadata(os.path.join(directory,
                                                            file_name))
                    if '-with-' in file_name:
                        keywords = [self.main_keyword, 'page:' +
                                    test_page_name]
                        metadata.set_tag_multiple('Iptc.Application2.Keywords',
                                                keywords)
                        print('Added keywords {} to {}.'.format(keywords,
                                                                file_name))
                    metadata['Exif.Image.Orientation'] = '1'
                    metadata['Iptc.Application2.Caption'] = self.caption
                    # TODO : add a 'template:<template name>' tag to one of
                    # the files to test if it get's noticed.
                    metadata.save_file()

        # delete any files/pages that may have been leftover from previous
        # tests
        self.delete_server_side()

        # create a test page that doesn't have the images on it
        page_dict = {"content": "<p>The Existing Upload Test Page.</p>",
                     "name": self.test_page_names[0],
                     }

        self.api.page.post(page_dict, username=self.user_name,
                           api_key=self.api_key)
        print('Created {} on the server.'.format(self.test_page_names[0]))

        test_page_slug = self.api.page(page_dict['name']).get()['slug']

        file_path = os.path.join(self.test_directories[0],
                                 self.test_files[0][0])
        with open(file_path, 'r') as f:
            self.api.file.post({'name': os.path.split(file_path)[1],
                                'slug': test_page_slug}, files={'file': f},
                               username=self.user_name,
                               api_key=self.api_key)
        print('Added {} to {}.'.format(file_path, self.test_page_names[0]))

        # TODO : create some images with the Exif such that the images have
        # to be rotated before upload.

        self.uploader = ImageUploader(self.api_url,
                                      user_name=self.user_name,
                                      api_key=self.api_key)

    def test_init(self):

        assert self.uploader.api._store['base_url'] == self.api_url
        assert self.uploader.api._store['format'] == 'json'

    def test_remove_tmp_dirs(self):
        directories = ['localwikidir1', 'localwikidir2']
        for directory in directories:
            os.mkdir(os.path.join('/tmp', directory))
            os.mkdir(os.path.join('/tmp', directory,
                                  self.uploader._tmp_dir_name))
        files = ['file1.jpg', 'file2.jpg']
        file_paths = []
        for directory, file_name in zip(directories, files):
            file_path = os.path.join('/tmp', directory,
                                     self.uploader._tmp_dir_name, file_name)
            with open(file_path, 'w') as f:
                pass
            file_paths.append(file_path)
            assert os.path.exists(file_path)

        self.uploader.remove_tmp_dirs([os.path.join('/tmp', d, f) for d, f
                                       in zip(directories, files)])

        for file_path in file_paths:
            assert not os.path.isdir(os.path.split(file_path)[0])
            assert not os.path.exists(file_path)

        for directory in directories:
            shutil.rmtree(os.path.join('/tmp', directory))

    def test_find_localwiki_images(self):
        self.uploader.directories = self.test_directories
        self.uploader.main_keyword = self.main_keyword
        wiki_images = self.uploader.find_localwiki_images()

        expected_wiki_images = {}
        for directory, page_name, file_names in zip(self.test_directories,
                                                    self.test_page_names,
                                                    self.test_files):
            file_paths = [os.path.join(directory, file_name) for file_name
                          in file_names]
            expected_wiki_images.update(dict(zip(file_paths, zip(len(file_paths)
                                                 * [[page_name]], len(file_paths)
                                                                 * [None]))))

        assert expected_wiki_images == wiki_images

    def test_find_localwiki_images_in_directory(self):

        for directory, page_name in zip(self.test_directories,
                                        self.test_page_names):
            file_names = [f for f in os.listdir(directory) if '-with-' in f]
            self.uploader.main_keyword = self.main_keyword
            wiki_images = \
                self.uploader.find_localwiki_images_in_directory(directory)
            file_paths = [os.path.join(directory, file_name) for file_name
                          in file_names]
            expected_wiki_images = dict(zip(file_paths, zip(len(file_paths) *
                                            [[page_name]], len(file_paths) * [None])))
            assert expected_wiki_images == wiki_images

    def test_create_page(self):
        # create a page that doesn't exist
        page_name = 'This Page Does Not Exist'
        self.uploader.create_page(page_name)
        page = self.api.page(page_name).get()
        assert page['name'] == page_name
        assert page['content'] == self.uploader._stub_page_content

        self.api.page('This Page Does Not Exist').delete(
            username=self.user_name, api_key=self.api_key)

        # create a page that does exist
        page_name = 'Existing Upload Test Page'
        page = self.uploader.create_page(page_name)
        assert page['name'] == page_name
        assert page['content'] == "<p>The Existing Upload Test Page.</p>"

        # test page creation with a template
        page_name = 'This Page Does Not Exist And Has A Template'
        self.uploader.create_page(page_name, template_name='Business')
        page = self.api.page(page_name).get()
        template = self.api.page('Templates/Business').get()
        assert template['content'] in page['content']
        self.api.page(page_name).delete(
            username=self.user_name, api_key=self.api_key)

    def test_find_files_in_page(self):

        non_page_name = 'this will never be the name of a page'
        assert self.uploader.find_files_in_page(non_page_name) is None

        files_in_page = \
            self.uploader.find_files_in_page('Existing Upload Test Page')
        assert files_in_page[0]['name'] == 'photo-with-tags-01.jpg'
        assert files_in_page[0]['slug'] == 'existing upload test page'

    def test_file_exists_on_server(self):

        assert not self.uploader.file_exists_on_server('booglediddly.png')
        assert self.uploader.file_exists_on_server('photo-with-tags-01.jpg')

    def test_rotate_image(self):

        tmp_image_path = 'tmp_rotation_test_image.jpg'
        shutil.copyfile('rotation_test_image.jpg', tmp_image_path)

        metadata_before = GExiv2.Metadata(tmp_image_path)

        self.uploader.rotate_image(tmp_image_path)

        metadata_after = GExiv2.Metadata(tmp_image_path)

        assert metadata_after['Exif.Image.Orientation'] == '1'
        assert metadata_after.get_pixel_height() == \
            metadata_before.get_pixel_width()
        assert metadata_after.get_pixel_width() == \
            metadata_before.get_pixel_height()

        os.remove('tmp_rotation_test_image.jpg')

    def test_embed_image(self):
        page_info = self.uploader.embed_image(self.test_page_names[0],
                                              'photo-with-tags-01.jpg',
                                              3.0 / 4.0, caption=self.caption)
        expected_content = \
"""
<p>
  <span class="image_frame image_frame_border">
    <img src="_files/photo-with-tags-01.jpg" style="width: 300px; height: 400px;" />
    <span class="image_caption" style="width: 300px;">
      {}
    </span>
  </span>
</p>
""".format(self.caption)

        assert expected_content in page_info['content']

        page_info = self.uploader.embed_image(self.test_page_names[0],
                                              'booger.png', 1.0)
        assert page_info is None

    def test_upload_image(self):
        page_info = self.api.page(self.test_page_names[0]).get()
        self.uploader.upload_image(page_info,
                                   os.path.join(self.test_directories[0],
                                                'photo-without-tags-01.jpg'))
        files = self.api.file.get(slug=page_info['slug'])['objects']
        assert 'photo-without-tags-01.jpg' in [f['name'] for f in files]

    def test_upload(self):
        self.uploader.upload(self.main_keyword, *self.test_directories)

        for page_name, test_files in zip(self.test_page_names,
                                         self.test_files):
            page_info = self.api.page(page_name).get()
            files = self.api.file.get(slug=page_info['slug'])['objects']
            file_names_on_server = [f['name'] for f in files]
            for file_name in test_files:
                assert file_name in file_names_on_server

    def test_resize_image_to_1024(self):
        image_path = 'resize_test_image.jpg'
        tmp_image_path = 'tmp_resize_test_image.jpg'
        shutil.copyfile(image_path, tmp_image_path)

        metadata_before = GExiv2.Metadata(tmp_image_path)
        aspect_ratio = (float(metadata_before.get_pixel_width()) /
                        float(metadata_before.get_pixel_height()))

        self.uploader.resize_image_to_1024(image_path, tmp_image_path)

        metadata_after = GExiv2.Metadata(tmp_image_path)

        assert metadata_after.get_pixel_width() == 1024
        assert metadata_after.get_pixel_height() == int(1024 / aspect_ratio)

        for tag in metadata_before.get_exif_tags() + metadata_before.get_iptc_tags():
            assert metadata_after[tag] == metadata_before[tag]

        # TODO : assert that image doesn't change if it is less than 1024

        os.remove(tmp_image_path)

    def teardown(self):

        # remove all keywords from the test images
        for directory in self.test_directories:
            file_names = os.listdir(directory)
            for file_name in file_names:
                if True in [file_name.endswith(ext) for ext in
                            ImageUploader._file_extensions]:
                    metadata = GExiv2.Metadata(os.path.join(directory,
                                                            file_name))
                    metadata.clear_tag('Iptc.Application2.Keywords')
                    metadata.clear_tag('Iptc.Application2.Caption')
                    metadata.save_file()
                    print('Cleared tags from {}.'.format(file_name))

        # remove the files attached to the test page and the test pages from
        # the server
        self.delete_server_side()
class TestUploadWiki():

    config = ConfigParser.ConfigParser()
    config.read('test.cfg')
    api_url = config.get('localwiki', 'api_url')
    user_name = config.get('localwiki', 'user_name')
    api_key = config.get('localwiki', 'api_key')
    main_keyword = config.get('localwiki', 'main_keyword')

    test_page_names = [
        'Existing Upload Test Page', 'Non Existing Upload Test Page'
    ]

    test_directories = ['test-dir-01', 'test-dir-02']

    test_files = [['photo-with-tags-01.jpg', 'photo-with-tags-01.png'],
                  ['photo-with-tags-02.jpg', 'photo-with-tags-02.png']]

    caption = 'The cool caption.'

    def delete_server_side(self):
        """Deletes the files from the test pages and then the pages
        themselves."""

        # the server
        for page_name in self.test_page_names + ['This Page Does Not Exist']:
            try:
                self.api.page(page_name).get()
            except slumber.exceptions.HttpClientError:
                pass
            else:
                files = self.api.file.get(slug=page_name.lower())['objects']
                for f in files:
                    self.api.file(f['id']).delete(username=self.user_name,
                                                  api_key=self.api_key)
                    print("Deleted {} from {} on the server.".format(
                        f['name'], page_name))
                self.api.page(page_name).delete(username=self.user_name,
                                                api_key=self.api_key)
                print("Deleted {} from the server".format(page_name))

    def setup(self):

        self.api = slumber.API(self.api_url, append_slash=False)

        # create directories with images, some with correct keywords
        for directory, test_page_name in zip(self.test_directories,
                                             self.test_page_names):
            file_names = os.listdir(directory)
            for file_name in file_names:
                if True in [
                        file_name.endswith(ext)
                        for ext in ImageUploader._file_extensions
                ]:
                    metadata = GExiv2.Metadata(
                        os.path.join(directory, file_name))
                    if '-with-' in file_name:
                        keywords = [
                            self.main_keyword, 'page:' + test_page_name
                        ]
                        metadata.set_tag_multiple('Iptc.Application2.Keywords',
                                                  keywords)
                        print('Added keywords {} to {}.'.format(
                            keywords, file_name))
                    metadata['Exif.Image.Orientation'] = '1'
                    metadata['Iptc.Application2.Caption'] = self.caption
                    # TODO : add a 'template:<template name>' tag to one of
                    # the files to test if it get's noticed.
                    metadata.save_file()

        # delete any files/pages that may have been leftover from previous
        # tests
        self.delete_server_side()

        # create a test page that doesn't have the images on it
        page_dict = {
            "content": "<p>The Existing Upload Test Page.</p>",
            "name": self.test_page_names[0],
        }

        self.api.page.post(page_dict,
                           username=self.user_name,
                           api_key=self.api_key)
        print('Created {} on the server.'.format(self.test_page_names[0]))

        test_page_slug = self.api.page(page_dict['name']).get()['slug']

        file_path = os.path.join(self.test_directories[0],
                                 self.test_files[0][0])
        with open(file_path, 'r') as f:
            self.api.file.post(
                {
                    'name': os.path.split(file_path)[1],
                    'slug': test_page_slug
                },
                files={'file': f},
                username=self.user_name,
                api_key=self.api_key)
        print('Added {} to {}.'.format(file_path, self.test_page_names[0]))

        # TODO : create some images with the Exif such that the images have
        # to be rotated before upload.

        self.uploader = ImageUploader(self.api_url,
                                      user_name=self.user_name,
                                      api_key=self.api_key)

    def test_init(self):

        assert self.uploader.api._store['base_url'] == self.api_url
        assert self.uploader.api._store['format'] == 'json'

    def test_remove_tmp_dirs(self):
        directories = ['localwikidir1', 'localwikidir2']
        for directory in directories:
            os.mkdir(os.path.join('/tmp', directory))
            os.mkdir(
                os.path.join('/tmp', directory, self.uploader._tmp_dir_name))
        files = ['file1.jpg', 'file2.jpg']
        file_paths = []
        for directory, file_name in zip(directories, files):
            file_path = os.path.join('/tmp', directory,
                                     self.uploader._tmp_dir_name, file_name)
            with open(file_path, 'w') as f:
                pass
            file_paths.append(file_path)
            assert os.path.exists(file_path)

        self.uploader.remove_tmp_dirs(
            [os.path.join('/tmp', d, f) for d, f in zip(directories, files)])

        for file_path in file_paths:
            assert not os.path.isdir(os.path.split(file_path)[0])
            assert not os.path.exists(file_path)

        for directory in directories:
            shutil.rmtree(os.path.join('/tmp', directory))

    def test_find_localwiki_images(self):
        self.uploader.directories = self.test_directories
        self.uploader.main_keyword = self.main_keyword
        wiki_images = self.uploader.find_localwiki_images()

        expected_wiki_images = {}
        for directory, page_name, file_names in zip(self.test_directories,
                                                    self.test_page_names,
                                                    self.test_files):
            file_paths = [
                os.path.join(directory, file_name) for file_name in file_names
            ]
            expected_wiki_images.update(
                dict(
                    zip(
                        file_paths,
                        zip(
                            len(file_paths) * [[page_name]],
                            len(file_paths) * [None]))))

        assert expected_wiki_images == wiki_images

    def test_find_localwiki_images_in_directory(self):

        for directory, page_name in zip(self.test_directories,
                                        self.test_page_names):
            file_names = [f for f in os.listdir(directory) if '-with-' in f]
            self.uploader.main_keyword = self.main_keyword
            wiki_images = \
                self.uploader.find_localwiki_images_in_directory(directory)
            file_paths = [
                os.path.join(directory, file_name) for file_name in file_names
            ]
            expected_wiki_images = dict(
                zip(
                    file_paths,
                    zip(
                        len(file_paths) * [[page_name]],
                        len(file_paths) * [None])))
            assert expected_wiki_images == wiki_images

    def test_create_page(self):
        # create a page that doesn't exist
        page_name = 'This Page Does Not Exist'
        self.uploader.create_page(page_name)
        page = self.api.page(page_name).get()
        assert page['name'] == page_name
        assert page['content'] == self.uploader._stub_page_content

        self.api.page('This Page Does Not Exist').delete(
            username=self.user_name, api_key=self.api_key)

        # create a page that does exist
        page_name = 'Existing Upload Test Page'
        page = self.uploader.create_page(page_name)
        assert page['name'] == page_name
        assert page['content'] == "<p>The Existing Upload Test Page.</p>"

        # test page creation with a template
        page_name = 'This Page Does Not Exist And Has A Template'
        self.uploader.create_page(page_name, template_name='Business')
        page = self.api.page(page_name).get()
        template = self.api.page('Templates/Business').get()
        assert template['content'] in page['content']
        self.api.page(page_name).delete(username=self.user_name,
                                        api_key=self.api_key)

    def test_find_files_in_page(self):

        non_page_name = 'this will never be the name of a page'
        assert self.uploader.find_files_in_page(non_page_name) is None

        files_in_page = \
            self.uploader.find_files_in_page('Existing Upload Test Page')
        assert files_in_page[0]['name'] == 'photo-with-tags-01.jpg'
        assert files_in_page[0]['slug'] == 'existing upload test page'

    def test_file_exists_on_server(self):

        assert not self.uploader.file_exists_on_server('booglediddly.png')
        assert self.uploader.file_exists_on_server('photo-with-tags-01.jpg')

    def test_rotate_image(self):

        tmp_image_path = 'tmp_rotation_test_image.jpg'
        shutil.copyfile('rotation_test_image.jpg', tmp_image_path)

        metadata_before = GExiv2.Metadata(tmp_image_path)

        self.uploader.rotate_image(tmp_image_path)

        metadata_after = GExiv2.Metadata(tmp_image_path)

        assert metadata_after['Exif.Image.Orientation'] == '1'
        assert metadata_after.get_pixel_height() == \
            metadata_before.get_pixel_width()
        assert metadata_after.get_pixel_width() == \
            metadata_before.get_pixel_height()

        os.remove('tmp_rotation_test_image.jpg')

    def test_embed_image(self):
        page_info = self.uploader.embed_image(self.test_page_names[0],
                                              'photo-with-tags-01.jpg',
                                              3.0 / 4.0,
                                              caption=self.caption)
        expected_content = \
"""
<p>
  <span class="image_frame image_frame_border">
    <img src="_files/photo-with-tags-01.jpg" style="width: 300px; height: 400px;" />
    <span class="image_caption" style="width: 300px;">
      {}
    </span>
  </span>
</p>
""".format(self.caption)

        assert expected_content in page_info['content']

        page_info = self.uploader.embed_image(self.test_page_names[0],
                                              'booger.png', 1.0)
        assert page_info is None

    def test_upload_image(self):
        page_info = self.api.page(self.test_page_names[0]).get()
        self.uploader.upload_image(
            page_info,
            os.path.join(self.test_directories[0],
                         'photo-without-tags-01.jpg'))
        files = self.api.file.get(slug=page_info['slug'])['objects']
        assert 'photo-without-tags-01.jpg' in [f['name'] for f in files]

    def test_upload(self):
        self.uploader.upload(self.main_keyword, *self.test_directories)

        for page_name, test_files in zip(self.test_page_names,
                                         self.test_files):
            page_info = self.api.page(page_name).get()
            files = self.api.file.get(slug=page_info['slug'])['objects']
            file_names_on_server = [f['name'] for f in files]
            for file_name in test_files:
                assert file_name in file_names_on_server

    def test_resize_image_to_1024(self):
        image_path = 'resize_test_image.jpg'
        tmp_image_path = 'tmp_resize_test_image.jpg'
        shutil.copyfile(image_path, tmp_image_path)

        metadata_before = GExiv2.Metadata(tmp_image_path)
        aspect_ratio = (float(metadata_before.get_pixel_width()) /
                        float(metadata_before.get_pixel_height()))

        self.uploader.resize_image_to_1024(image_path, tmp_image_path)

        metadata_after = GExiv2.Metadata(tmp_image_path)

        assert metadata_after.get_pixel_width() == 1024
        assert metadata_after.get_pixel_height() == int(1024 / aspect_ratio)

        for tag in metadata_before.get_exif_tags(
        ) + metadata_before.get_iptc_tags():
            assert metadata_after[tag] == metadata_before[tag]

        # TODO : assert that image doesn't change if it is less than 1024

        os.remove(tmp_image_path)

    def teardown(self):

        # remove all keywords from the test images
        for directory in self.test_directories:
            file_names = os.listdir(directory)
            for file_name in file_names:
                if True in [
                        file_name.endswith(ext)
                        for ext in ImageUploader._file_extensions
                ]:
                    metadata = GExiv2.Metadata(
                        os.path.join(directory, file_name))
                    metadata.clear_tag('Iptc.Application2.Keywords')
                    metadata.clear_tag('Iptc.Application2.Caption')
                    metadata.save_file()
                    print('Cleared tags from {}.'.format(file_name))

        # remove the files attached to the test page and the test pages from
        # the server
        self.delete_server_side()