class TestDocumentSimple(unittest.TestCase):

    def setUp(self):
        self.doc = Document("testing")

    def test_serialize(self):
        expected_original = {
            'handler' : '/handler.lua',
            'hash' : None,
            'resources': {},
        }

        serial = self.doc.serialize()
        self.assertEqual(
            sorted(serial.keys()),
            ['events', 'original']
        )
        self.assertEqual(serial['original'], expected_original)
        self.assertEqual(serial['events'],   [])

        self.doc.add_resource(
            Resource(path="/example", content="example"),
            False
        )
        self.assertEqual(self.doc.serialize()['original'], expected_original)
        self.doc.freeze()
        self.assertEqual(
            self.doc.serialize()['original'],
            {
                'handler': '/handler.lua',
                'hash': 'current',
                'resources': {
                    '/example': {
                        'comment': '',
                        'content': 'example',
                        'path':    '/example',
                        'type':    'application/x-octet-stream'
                   }
                }
            }
        )

    def test_deserialize(self):
        self.doc.add_resource(
            Resource(path="/example", content="example"),
            False
        )
        self.doc.freeze()
        serial = self.doc.serialize()

        newdoc = Document(self.doc.name)
        newdoc.deserialize(serial)

        self.assertEqual(list(newdoc.resources.keys()), ['/example'])
        self.assertIsInstance(newdoc.resources['/example'], Resource)

        initial_resources = newdoc._initial.resources
        self.assertEqual(list(initial_resources.keys()), ['/example'])
        self.assertIsInstance(initial_resources['/example'], Resource)

    def test_saving(self):
        self.doc.add_resource(
            Resource(path="/example", content="example"),
            False
        )
        self.doc.freeze()

        save_to(self.doc, "example.dje")
        newdoc = load_from("example.dje")
        self.assertEqual(newdoc.serialize(), self.doc.serialize())