dramatiq.set_broker(rabbitmq_broker) if not config.SLACK_API_TOKEN: raise ValueError('You are missing a slack token! Please set the SLACK_API_TOKEN environment variable in your ' '.env file or in the system environment') sc = SlackClient(config.SLACK_API_TOKEN) db_engine = create_engine(config.DATABASE_URL) make_session = sessionmaker(bind=db_engine, autoflush=False) k = Kaori() k.adapters['slack'] = SlackAdapter(slack_client=sc) k.skills |= { DB(make_session=make_session), } if hasattr(config, 'USE_GCLOUD_STORAGE') and config.USE_GCLOUD_STORAGE: creds = service_account.Credentials.from_service_account_info(config.GCLOUD_SERVICE_ACCOUNT_INFO) bucket = storage.Client(project=creds.project_id, credentials=creds).bucket(config.IMAGES_BUCKET_GCLOUD) k.skills.add(GCloudStorageUploader(bucket=bucket, base_path=config.IMAGES_BUCKET_PATH)) elif config.KIZUNA_ENV == 'development': k.skills.add(LocalFileUploader()) else: k.logger.warning('no file upload handler specified!') if hasattr(config, 'GACHA_BATTLE_URL_BASE') and config.GACHA_BATTLE_URL_BASE:
def test_card_creation_state_happy(make_fake_user, grant_kkreds): config = test_config db_engine = create_engine(config.DATABASE_URL) make_session = sessionmaker(bind=db_engine, autoflush=False) k = Kaori() initial_ts = str(time()) slack = Mock(spec=SlackClient) slack.api_call = MagicMock(return_value={ 'ok': True, 'ts': initial_ts, }) adapter = SlackAdapter(slack_client=slack) adapter._cached_bot_id = token_hex(2) k.adapters['slack'] = adapter db = DB(make_session=make_session) k.skills |= { db, CardBattler(player_url_base='https://battle.kaori.io/') } k.skills.add(LocalFileUploader()) k.plugins |= { gacha_plugin, } u: User = make_fake_user() slack_id = u.slack_id user_id = u.id grant_kkreds(u, 1e10) def handle(msg): k.handle('slack', msg) channel = "CXXXXXX" def user_message(**kwargs): ts = time() return { "team_id": "TXXXX", "event": { "type": "message", "user": slack_id, "ts": ts, "channel": channel, "event_ts": ts, "channel_type": "channel", **kwargs, }, "type": "event_callback", } with db.session_scope() as session: handle(user_message(text='@kaori create card', ts=initial_ts, event_ts=initial_ts)) card = session.query(Card) \ .join(User) \ .filter(Card.creation_thread_ts == initial_ts) \ .first() assert card.owner == user_id assert card.creation_cursor == 'set_name' name = f'Matt Morgan {token_hex(2)}' handle(user_message(text=f'@kaori {name}', thread_ts=initial_ts)) session.refresh(card) assert card.name == name assert card.creation_cursor == 'set_image' # TODO skipping over image uploading lmao card.creation_cursor = 'set_description' session.commit() handle(user_message(text=f'@kaori ubu uwu', thread_ts=initial_ts)) session.refresh(card) assert card.description == 'ubu uwu' handle(user_message(text=f'@kaori stupid feral', thread_ts=initial_ts)) session.refresh(card) assert card.primary_nature == 'stupid' assert card.secondary_nature == 'feral' handle(user_message(text=f'@kaori S', thread_ts=initial_ts)) session.refresh(card) assert card.rarity_string() == 'S' assert card.published is False handle(user_message(text=f'@kaori yes', thread_ts=initial_ts)) session.refresh(card) assert card.published is True assert card.creation_cursor == 'done'
def db() -> DB: return DB(make_session=db_sessionmaker())