async def test_remove_from_project(tmpdir): await create_and_populate_test_db(tmpdir) db_path = f"sqlite:///{tmpdir / 'alfie.db'}" app.config['DATABASE'] = db_path client = app.test_client() project = 'icepap-ipassign' name = 'Mock File' loc = '/whatever/place/file.rst' desc = 'Not a real file, just testing that entries are removed ok' get_pid = f'SELECT ProjectId FROM Project WHERE Name = "{project}"' async with Database(db_path) as db: pid = await db.fetch_val(get_pid) did = await db.execute(insert_document, values={'Name': name, 'Location': loc, 'Description': desc}) await db.execute(insert_project_entry, values={'ProjectId': pid, 'DocumentId': did}) response = await client.post('/remove', form={'document': name, 'project': project}) page = await response.get_data() assert b'<title>Redirect</title>' in page async with Database(db_path) as db: query = f'SELECT * FROM Project WHERE ProjectId = {did}' ret = await db.fetch_one(query) assert ret is None response = await client.get('/index') page = (await response.get_data()).decode() assert f'{name} removed from {project}' in page
async def test_add_to_project(tmpdir): await create_and_populate_test_db(tmpdir) db_path = f"sqlite:///{tmpdir / 'alfie.db'}" app.config['DATABASE'] = db_path client = app.test_client() project = 'icepap-ipassign' name = 'Mock File' location = '/whatever/place/file.rst' description = 'Not a real file, just testing that entries are added ok' response = await client.post('/add', form={'name': name, 'location': location, 'description': description, 'project': project}) page = await response.get_data() assert b'<title>Redirect</title>' in page async with Database(db_path) as db: query = f'SELECT * FROM Document WHERE Name = "{name}"' ret = await db.fetch_one(query) assert name == ret[1] assert location == ret[2] assert description == ret[3] response = await client.get('/index') page = (await response.get_data()).decode() assert name in page assert location in page assert description in page
async def test_load_no_project(tmpdir): await create_db.create(tmpdir / 'alfie.db') db_path = f"sqlite:///{tmpdir / 'alfie.db'}" app.config['DATABASE'] = db_path client = app.test_client() response = await client.get('/index') page = await response.get_data() assert b'No project available' in page
async def test_load_projects(tmpdir): await create_and_populate_test_db(tmpdir) db_path = f"sqlite:///{tmpdir / 'alfie.db'}" app.config['DATABASE'] = db_path client = app.test_client() # Test export as text file ok. response = await client.get('/index') assert response.status_code == 200 page = (await response.get_data()).decode() for key in projects.keys(): assert key in page for name, (loc, desc) in projects[key].items(): assert name in page assert loc in page assert desc in page
async def test_export_data(tmpdir): await create_and_populate_test_db(tmpdir) db_path = f"sqlite:///{tmpdir / 'alfie.db'}" app.config['DATABASE'] = db_path client = app.test_client() # Test export as text file ok. response = await client.get('/export?project=icepap-ipassign&zip=False') assert response.status_code == 200 expected = (b'README: tests/test_data/ipa/README.md\n' b'GUI README: tests/test_data/ipa/gui/gui.md') data = await response.get_data() assert data == expected # Test export zip file ok response = await client.get('/export?project=icepap-ipassign&zip=True') assert response.status_code == 200 data = await response.get_data() assert data.startswith(b'\x50\x4b') # PK zip file header # Test handling (skipping) inaccessible files ok. get_pid = f'SELECT ProjectId FROM Project WHERE Name = "icepap-ipassign"' async with Database(db_path) as db: pid = await db.fetch_val(get_pid) values = { 'Name': 'notafile', 'Location': 'no/dir/not/a/file.txt', 'Description': '' } did = await db.execute(insert_document, values) await db.execute(insert_project_entry, values={ 'ProjectId': pid, 'DocumentId': did }) response = await client.get('/export?project=icepap-ipassign&zip=True') assert response.status_code == 200 data = await response.get_data() assert data.startswith(b'\x50\x4b') # PK zip file header
async def test_add_project(tmpdir): await create_and_populate_test_db(tmpdir) db_path = f"sqlite:///{tmpdir / 'alfie.db'}" app.config['DATABASE'] = db_path client = app.test_client() response = await client.post('/create', form={'name': 'cuckoo'}) page = await response.get_data() assert b'<title>Redirect</title>' in page query = 'SELECT ProjectId FROM Project WHERE Name = "cuckoo"' async with Database(db_path) as db: ret = await db.fetch_val(query) assert ret == 7 response = await client.get('/index') page = (await response.get_data()).decode() assert '<div id="collapse-cuckoo"' in page assert '<div class="card-header" id="heading-cuckoo">' in page assert '<button id="cuckoo_export"' not in page assert '<button id="cuckoo_plus"' in page await client.post('/create', form={'name': 'cuckoo'}) response = await client.get('/index') page = (await response.get_data()).decode() assert 'This project already exists' in page await client.post('/create') response = await client.get('/index') page = (await response.get_data()).decode() assert 'Did not specify a project name' in page