from datetime import datetime, timedelta

from config import DefaultConfig
from test.testlogs import TestBuildLogs


class FakeTransaction(object):
  def __enter__(self):
    return self

  def __exit__(self, exc_type, value, traceback):
    pass


class TestConfig(DefaultConfig):
  TESTING = True

  DB_URI = 'sqlite:///:memory:'
  DB_CONNECTION_ARGS = {}

  @staticmethod
  def create_transaction(db):
    return FakeTransaction()

  DB_TRANSACTION_FACTORY = create_transaction

  DISTRIBUTED_STORAGE_CONFIG = {'local_us': ['FakeStorage', {}]}
  DISTRIBUTED_STORAGE_PREFERENCE = ['local_us']

  BUILDLOGS_MODULE_AND_CLASS = ('test.testlogs', 'testlogs.TestBuildLogs')
  BUILDLOGS_OPTIONS = ['devtable', 'building', 'deadbeef-dead-beef-dead-beefdeadbeef', False]

  USERFILES_LOCATION = 'local_us'

  FEATURE_SUPER_USERS = True
  FEATURE_BILLING = True
  SUPER_USERS = ['devtable']

  LICENSE_USER_LIMIT = 500
  LICENSE_EXPIRATION = datetime.now() + timedelta(weeks=520)
  LICENSE_EXPIRATION_WARNING = datetime.now() + timedelta(weeks=520)
  
  FEATURE_GITHUB_BUILD = True