Ejemplo n.º 1
0
class TestTopicDBScan(TestTopicTagDB):
    def create_topic_src_file(self, topic_name, tags):
        """Create a topic source file from a list of tags and topic name"""
        content = '\n'.join(tags)
        topic_name = topic_name + '.rst'
        topic_filepath = self.file_creator.create_file(topic_name, content)
        return topic_filepath

    def assert_json_index(self, file_paths, reference_tag_dict):
        """Asserts the scanned tags by checking the saved JSON index"""
        json_index = self.file_creator.create_file('index.json', '')
        self.topic_tag_db = TopicTagDB(index_file=json_index)
        self.topic_tag_db.scan(file_paths)
        self.topic_tag_db.save_to_json_index()
        with open(json_index, 'r') as f:
            saved_index = json.loads(f.read())
            self.assertEqual(saved_index, reference_tag_dict)

    def test_scan_all_valid_tags(self):
        tags = [
            ':description: This is a description', ':title: Title',
            ':category: Foo', ':related topic: Bar', ':related command: ec2'
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'description': ['This is a description'],
                'title': ['Title'],
                'category': ['Foo'],
                'related topic': ['Bar'],
                'related command': ['ec2']
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_invalid_tag(self):
        tags = [
            ':description: This is a description',
            ':title: Title',
            ':category: Foo',
            ':related_topic: Bar',
        ]
        topic_name = 'my-topic'

        topic_filepath = self.create_topic_src_file(topic_name, tags)
        with self.assertRaises(ValueError):
            self.topic_tag_db.scan([topic_filepath])

    def test_scan_no_tags(self):
        tags = []
        topic_name = 'my-topic'

        reference_tag_dict = {topic_name: {}}
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_values(self):
        tags = [
            ':category: Foo, Bar',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_single_and_multi_values(self):
        tags = [
            ':title: Title',
            ':category: Foo, Bar',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'title': ['Title'],
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_duplicate_values(self):
        tags = [':category: Foo, Foo, Bar']
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_values_extra_space(self):
        tags = [
            ':category:    Foo, Bar   ',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_values_no_space(self):
        tags = [
            ':category: Foo,Bar',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_preserve_space(self):
        tags = [
            ':category: Foo Bar, Baz',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo Bar', 'Baz'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_multiple_files(self):
        topic_base = 'my-topic'
        reference_tag_dict = {}
        topic_files = []
        for i in range(5):
            topic_name = topic_base + '-' + str(i)
            tags = [
                ':description: This is about %s' % topic_name, ':title: Title',
                ':category: Foo', ':related topic: Bar',
                ':related command: ec2'
            ]

            reference_tag_dict[topic_name] = {
                'description': ['This is about %s' % topic_name],
                'title': ['Title'],
                'category': ['Foo'],
                'related topic': ['Bar'],
                'related command': ['ec2']
            }
            topic_files.append(self.create_topic_src_file(topic_name, tags))
        self.assert_json_index(topic_files, reference_tag_dict)
Ejemplo n.º 2
0
class TestTopicDBScan(TestTopicTagDB):
    def create_topic_src_file(self, topic_name, tags):
        """Create a topic source file from a list of tags and topic name"""
        content = '\n'.join(tags)
        topic_name = topic_name + '.rst'
        topic_filepath = self.file_creator.create_file(topic_name, content)
        return topic_filepath

    def assert_json_index(self, file_paths, reference_tag_dict):
        """Asserts the scanned tags by checking the saved JSON index"""
        json_index = self.file_creator.create_file('index.json', '')
        self.topic_tag_db = TopicTagDB(index_file=json_index)
        self.topic_tag_db.scan(file_paths)
        self.topic_tag_db.save_to_json_index()
        with open(json_index, 'r') as f:
            saved_index = json.loads(f.read())
            self.assertEqual(saved_index, reference_tag_dict)

    def test_scan_all_valid_tags(self):
        tags = [
            ':description: This is a description',
            ':title: Title',
            ':category: Foo',
            ':related topic: Bar',
            ':related command: ec2'
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'description': ['This is a description'],
                'title': ['Title'],
                'category': ['Foo'],
                'related topic': ['Bar'],
                'related command': ['ec2']
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_invalid_tag(self):
        tags = [
            ':description: This is a description',
            ':title: Title',
            ':category: Foo',
            ':related_topic: Bar',
        ]
        topic_name = 'my-topic'

        topic_filepath = self.create_topic_src_file(topic_name, tags)
        with self.assertRaises(ValueError):
            self.topic_tag_db.scan([topic_filepath])

    def test_scan_no_tags(self):
        tags = []
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {}
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_values(self):
        tags = [
            ':category: Foo, Bar',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_single_and_multi_values(self):
        tags = [
            ':title: Title',
            ':category: Foo, Bar',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'title': ['Title'],
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_duplicate_values(self):
        tags = [
            ':category: Foo, Foo, Bar'
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_values_extra_space(self):
        tags = [
            ':category:    Foo, Bar   ',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_values_no_space(self):
        tags = [
            ':category: Foo,Bar',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo', 'Bar'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_tags_with_multi_preserve_space(self):
        tags = [
            ':category: Foo Bar, Baz',
        ]
        topic_name = 'my-topic'

        reference_tag_dict = {
            topic_name: {
                'category': ['Foo Bar', 'Baz'],
            }
        }
        topic_filepath = self.create_topic_src_file(topic_name, tags)
        self.assert_json_index([topic_filepath], reference_tag_dict)

    def test_scan_multiple_files(self):
        topic_base = 'my-topic'
        reference_tag_dict = {}
        topic_files = []
        for i in range(5):
            topic_name = topic_base + '-' + str(i)
            tags = [
                ':description: This is about %s' % topic_name,
                ':title: Title',
                ':category: Foo',
                ':related topic: Bar',
                ':related command: ec2'
            ]

            reference_tag_dict[topic_name] = {
                'description': ['This is about %s' % topic_name],
                'title': ['Title'],
                'category': ['Foo'],
                'related topic': ['Bar'],
                'related command': ['ec2']
            }
            topic_files.append(self.create_topic_src_file(topic_name, tags))
        self.assert_json_index(topic_files, reference_tag_dict)
Ejemplo n.º 3
0
class TestTopicTagDBGeneral(TestTopicTagDB):
    def test_valid_tags(self):
        self.assertCountEqual(self.topic_tag_db.valid_tags, [
            'title', 'description', 'category', 'related command',
            'related topic'
        ])

    def test_topic_dir(self):
        self.topic_tag_db = TopicTagDB(topic_dir='foo')
        self.assertEqual(self.topic_tag_db.topic_dir, 'foo')
        self.topic_tag_db.topic_dir = 'bar'
        self.assertEqual(self.topic_tag_db.topic_dir, 'bar')

    def test_index_file(self):
        self.topic_tag_db = TopicTagDB(index_file='foo')
        self.assertEqual(self.topic_tag_db.index_file, 'foo')
        self.topic_tag_db.index_file = 'bar'
        self.assertEqual(self.topic_tag_db.index_file, 'bar')

    def test_get_all_topic_names(self):
        tag_dict = {
            'topic-name-1': {
                'title': ['My First Topic Title'],
            },
            'topic-name-2': {
                'title': ['My Second Topic Title'],
            }
        }
        reference_topic_list = ['topic-name-1', 'topic-name-2']
        self.topic_tag_db = TopicTagDB(tag_dict)
        self.assertCountEqual(self.topic_tag_db.get_all_topic_names(),
                              reference_topic_list)

    def test_get_all_topic_source_files(self):
        source_files = []
        topic_dir = self.file_creator.rootdir
        self.topic_tag_db = TopicTagDB(topic_dir=topic_dir)
        for i in range(5):
            topic_name = 'topic-name-' + str(i)
            source_files.append(self.file_creator.create_file(topic_name, ''))

        self.assertCountEqual(self.topic_tag_db.get_all_topic_src_files(),
                              source_files)

    def test_get_all_topic_source_files_ignore_index(self):
        topic_filename = 'mytopic'
        index_filename = 'topic-tags.json'
        source_files = []
        source_files.append(self.file_creator.create_file(topic_filename, ''))
        index_file = self.file_creator.create_file(index_filename, '')
        topic_dir = self.file_creator.rootdir
        self.topic_tag_db = TopicTagDB(index_file=index_file,
                                       topic_dir=topic_dir)
        self.assertCountEqual(self.topic_tag_db.get_all_topic_src_files(),
                              source_files)

    def test_get_all_topic_source_files_ignore_hidden(self):
        topic_filename = 'mytopic'
        hidden_filename = '.' + topic_filename
        source_files = []
        source_files.append(self.file_creator.create_file(topic_filename, ''))
        self.file_creator.create_file(hidden_filename, '')
        topic_dir = self.file_creator.rootdir
        self.topic_tag_db = TopicTagDB(topic_dir=topic_dir)
        self.assertCountEqual(self.topic_tag_db.get_all_topic_src_files(),
                              source_files)

    def test_get_tag_value_all_tags(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'title': ['My First Topic Title'],
                'description': ['This describes my first topic'],
                'category': ['General Topics'],
                'related command': ['aws s3'],
                'related topic': ['topic-name-2']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)

        # Check the title get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'title')
        self.assertEqual(value, ['My First Topic Title'])

        # Check the description get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'description')
        self.assertEqual(value, ['This describes my first topic'])

        # Check the category get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'category')
        self.assertEqual(value, ['General Topics'])

        # Check the related command get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'related command')
        self.assertEqual(value, ['aws s3'])

        # Check the related topic get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'related topic')
        self.assertEqual(value, ['topic-name-2'])

    def test_get_tag_multi_value(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'related topic': ['foo', 'bar']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        # Check the related topic get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'related topic')
        self.assertEqual(value, ['foo', 'bar'])

    def test_get_tag_topic_no_exists(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'related topic': ['foo']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_value('no-exist', 'related topic')
        self.assertEqual(value, None)

    def test_get_tag_no_exist_tag(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'related topic': ['foo']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_value(topic_name, ':foo:')
        self.assertEqual(value, None)

    def test_get_tag_no_exist_use_default(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'related topic': ['foo']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_value('no-exist', ':foo:', [])
        self.assertEqual(value, [])

    def test_get_tag_single_value(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'title': ['foo']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_single_value('topic-name-1', 'title')
        self.assertEqual(value, 'foo')

    def test_get_tag_single_value_exception(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'title': ['foo', 'bar']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        with self.assertRaises(ValueError):
            self.topic_tag_db.get_tag_single_value('topic-name-1', 'title')

    def test_get_tag_single_value_no_exists(self):
        topic_name = 'topic-name-1'
        tag_dict = {topic_name: {'title': ['foo']}}
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_single_value('topic-name-1',
                                                       ':title:')
        self.assertEqual(value, None)

    def test_load_and_save_json_index(self):
        tag_dict = {
            'topic-name-1': {
                'title': ['My First Topic Title'],
                'description': ['This describes my first topic'],
                'category': ['General Topics', 'S3'],
                'related command': ['aws s3'],
                'related topic': ['topic-name-2']
            },
            'topic-name-2': {
                'title': ['My Second Topic Title'],
                'description': ['This describes my second topic'],
                'category': ['General Topics'],
                'related topic': ['topic-name-1']
            }
        }

        json_index = self.file_creator.create_file('index.json', '')

        # Create a JSON index to be loaded.
        tag_json = json.dumps(tag_dict, indent=4, sort_keys=True)
        with open(json_index, 'w') as f:
            f.write(tag_json)

        # Load the JSON index.
        self.topic_tag_db = TopicTagDB(index_file=json_index)
        self.topic_tag_db.load_json_index()

        # Write the loaded json to disk and ensure it is as expected.
        saved_json_index = self.file_creator.create_file('index2.json', '')
        self.topic_tag_db.index_file = saved_json_index

        self.topic_tag_db.save_to_json_index()
        with open(saved_json_index, 'r') as f:
            self.assertEqual(f.read(), tag_json)
Ejemplo n.º 4
0
class TestTopicTagDBGeneral(TestTopicTagDB):
    def test_valid_tags(self):
        self.assertCountEqual(
            self.topic_tag_db.valid_tags,
            ['title', 'description', 'category', 'related command',
             'related topic']
        )

    def test_topic_dir(self):
        self.topic_tag_db = TopicTagDB(topic_dir='foo')
        self.assertEqual(self.topic_tag_db.topic_dir, 'foo')
        self.topic_tag_db.topic_dir = 'bar'
        self.assertEqual(self.topic_tag_db.topic_dir, 'bar')

    def test_index_file(self):
        self.topic_tag_db = TopicTagDB(index_file='foo')
        self.assertEqual(self.topic_tag_db.index_file, 'foo')
        self.topic_tag_db.index_file = 'bar'
        self.assertEqual(self.topic_tag_db.index_file, 'bar')

    def test_get_all_topic_names(self):
        tag_dict = {
            'topic-name-1': {
                'title': ['My First Topic Title'],
            },
            'topic-name-2': {
                'title': ['My Second Topic Title'],
            }
        }
        reference_topic_list = ['topic-name-1', 'topic-name-2']
        self.topic_tag_db = TopicTagDB(tag_dict)
        self.assertCountEqual(self.topic_tag_db.get_all_topic_names(),
                              reference_topic_list)

    def test_get_all_topic_source_files(self):
        source_files = []
        topic_dir = self.file_creator.rootdir
        self.topic_tag_db = TopicTagDB(topic_dir=topic_dir)
        for i in range(5):
            topic_name = 'topic-name-' + str(i)
            source_files.append(self.file_creator.create_file(topic_name, ''))

        self.assertCountEqual(
            self.topic_tag_db.get_all_topic_src_files(),
            source_files
        )

    def test_get_all_topic_source_files_ignore_index(self):
        topic_filename = 'mytopic'
        index_filename = 'topic-tags.json'
        source_files = []
        source_files.append(self.file_creator.create_file(topic_filename, ''))
        index_file = self.file_creator.create_file(index_filename, '')
        topic_dir = self.file_creator.rootdir
        self.topic_tag_db = TopicTagDB(index_file=index_file,
                                       topic_dir=topic_dir)
        self.assertCountEqual(
            self.topic_tag_db.get_all_topic_src_files(),
            source_files
        )

    def test_get_all_topic_source_files_ignore_hidden(self):
        topic_filename = 'mytopic'
        hidden_filename = '.' + topic_filename
        source_files = []
        source_files.append(self.file_creator.create_file(topic_filename, ''))
        self.file_creator.create_file(hidden_filename, '')
        topic_dir = self.file_creator.rootdir
        self.topic_tag_db = TopicTagDB(topic_dir=topic_dir)
        self.assertCountEqual(
            self.topic_tag_db.get_all_topic_src_files(),
            source_files
        )

    def test_get_tag_value_all_tags(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'title': ['My First Topic Title'],
                'description': ['This describes my first topic'],
                'category': ['General Topics'],
                'related command': ['aws s3'],
                'related topic': ['topic-name-2']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)

        # Check the title get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'title')
        self.assertEqual(value, ['My First Topic Title'])

        # Check the description get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'description')
        self.assertEqual(value, ['This describes my first topic'])

        # Check the category get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'category')
        self.assertEqual(value, ['General Topics'])

        # Check the related command get tag value
        value = self.topic_tag_db.get_tag_value(topic_name,
                                                'related command')
        self.assertEqual(value, ['aws s3'])

        # Check the related topic get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'related topic')
        self.assertEqual(value, ['topic-name-2'])

    def test_get_tag_multi_value(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'related topic': ['foo', 'bar']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        # Check the related topic get tag value
        value = self.topic_tag_db.get_tag_value(topic_name, 'related topic')
        self.assertEqual(value, ['foo', 'bar'])

    def test_get_tag_topic_no_exists(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'related topic': ['foo']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_value('no-exist', 'related topic')
        self.assertEqual(value, None)

    def test_get_tag_no_exist_tag(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'related topic': ['foo']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_value(topic_name, ':foo:')
        self.assertEqual(value, None)

    def test_get_tag_no_exist_use_default(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'related topic': ['foo']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_value('no-exist', ':foo:', [])
        self.assertEqual(value, [])

    def test_get_tag_single_value(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'title': ['foo']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_single_value('topic-name-1', 'title')
        self.assertEqual(value, 'foo')

    def test_get_tag_single_value_exception(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'title': ['foo', 'bar']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        with self.assertRaises(ValueError):
            self.topic_tag_db.get_tag_single_value('topic-name-1', 'title')

    def test_get_tag_single_value_no_exists(self):
        topic_name = 'topic-name-1'
        tag_dict = {
            topic_name: {
                'title': ['foo']
            }
        }
        self.topic_tag_db = TopicTagDB(tag_dict)
        value = self.topic_tag_db.get_tag_single_value(
            'topic-name-1', ':title:')
        self.assertEqual(value, None)

    def test_load_and_save_json_index(self):
        tag_dict = {
            'topic-name-1': {
                'title': ['My First Topic Title'],
                'description': ['This describes my first topic'],
                'category': ['General Topics', 'S3'],
                'related command': ['aws s3'],
                'related topic': ['topic-name-2']
            },
            'topic-name-2': {
                'title': ['My Second Topic Title'],
                'description': ['This describes my second topic'],
                'category': ['General Topics'],
                'related topic': ['topic-name-1']
            }
        }

        json_index = self.file_creator.create_file('index.json', '')

        # Create a JSON index to be loaded.
        tag_json = json.dumps(tag_dict, indent=4, sort_keys=True)
        with open(json_index, 'w') as f:
            f.write(tag_json)

        # Load the JSON index.
        self.topic_tag_db = TopicTagDB(index_file=json_index)
        self.topic_tag_db.load_json_index()

        # Write the loaded json to disk and ensure it is as expected.
        saved_json_index = self.file_creator.create_file('index2.json', '')
        self.topic_tag_db.index_file = saved_json_index

        self.topic_tag_db.save_to_json_index()
        with open(saved_json_index, 'r') as f:
            self.assertEqual(f.read(), tag_json)