import unittest
import time

from app import app, storage
from initdb import setup_database_for_testing, finished_database_for_testing
from data import model, database

ADMIN_ACCESS_USER = 'devtable'
REPO = 'simple'

class TestBlobModel(unittest.TestCase):
  def setUp(self):
    setup_database_for_testing(self)

    self.app = app.test_client()
    self.ctx = app.test_request_context()
    self.ctx.__enter__()

  def tearDown(self):
    finished_database_for_testing(self)
    self.ctx.__exit__(True, None, None)

  def test_store_blob(self):
    location = database.ImageStorageLocation.select().get()

    # Create a new blob at a unique digest.
    digest = 'somecooldigest'
    blob_storage = model.blob.store_blob_record_and_temp_link(ADMIN_ACCESS_USER, REPO, digest,
                                                              location, 1024, 0, 5000)

    self.assertEquals(blob_storage.content_checksum, digest)
    self.assertEquals(blob_storage.image_size, 1024)
    self.assertEquals(blob_storage.uncompressed_size, 5000)

    # Link to the same digest.
    blob_storage2 = model.blob.store_blob_record_and_temp_link(ADMIN_ACCESS_USER, REPO, digest,
                                                               location, 2048, 0, 6000)

    self.assertEquals(blob_storage2.id, blob_storage.id)
    self.assertEquals(blob_storage2.image_size, 2048)
    self.assertEquals(blob_storage2.uncompressed_size, 6000)

    # Add a new digest, ensure it has a new record.
    otherdigest = 'anotherdigest'
    blob_storage3 = model.blob.store_blob_record_and_temp_link(ADMIN_ACCESS_USER, REPO, otherdigest,
                                                               location, 1234, 0, 5678)

    self.assertNotEquals(blob_storage3.id, blob_storage.id)
    self.assertEquals(blob_storage3.image_size, 1234)
    self.assertEquals(blob_storage3.uncompressed_size, 5678)


if __name__ == '__main__':
  unittest.main()