class QueryFactory(factory.DictFactory): timezone = fake.timezone().split("/")[1] language = factory.LazyAttribute( lambda x: random.choice([language.code for language in Language.query.all()]) ) arch = factory.LazyAttribute( lambda x: random.choice( [ Architecture.to_syno.get(a.code, a.code) for a in Architecture.query.filter(Architecture.code != "noarch").all() ] ) ) build = factory.LazyAttribute( lambda x: random.choice([f.build for f in Firmware.query.all()]) ) major = factory.LazyAttribute( lambda x: int(Firmware.find(x.build).version.split(".")[0]) ) minor = factory.LazyAttribute( lambda x: int(Firmware.find(x.build).version.split(".")[1]) ) unique = factory.LazyAttribute( lambda x: "synology_%s_%s" % ( x.arch, str(random.choice([1, 2, 4, 15, 18, 24])) + str(random.choice([12, 13, 14, 15])) + random.choice(["", "j", "+"]), ) ) package_update_channel = factory.fuzzy.FuzzyChoice(["stable", "beta"])
def test_stable_build_active_stable_null_data(self): build = BuildFactory( active=True, version__report_url=None, version__changelog=None, version__distributor=None, version__distributor_url=None, version__maintainer=None, version__maintainer_url=None, version__service_dependencies=[], version__dependencies=None, version__conflicts=None, version__package__add_screenshot=False, architectures=[Architecture.find("88f6281", syno=True)], firmware=Firmware.find(1594), ) db.session.commit() data = dict(arch="88f6281", build="1594", language="enu") response = self.client.post(url_for("nas.catalog"), data=data) self.assert200(response) self.assertHeader(response, "Content-Type", "application/json") catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 1) self.assertCatalogEntry(catalog[0], build, data, dict(arch="88f628x", build="1594"))
def test_stable_build_active_stable_download_count(self): package = PackageFactory() build = BuildFactory( active=True, version__report_url=None, version__package=package, architectures=[Architecture.find("cedarview")], firmware=Firmware.find(1594), ) DownloadFactory.create_batch(1, build=build, date=datetime.now()) DownloadFactory.create_batch(2, build=build, date=datetime.now() - timedelta(days=30)) DownloadFactory.create_batch(4, build=build, date=datetime.now() - timedelta(days=100)) db.session.commit() data = dict(arch="cedarview", build="1594", language="enu") response = self.client.post(url_for("nas.catalog"), data=data) self.assert200(response) self.assertHeader(response, "Content-Type", "application/json") catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 1) self.assertEqual(catalog[0]["download_count"], 7) self.assertEqual(catalog[0]["recent_download_count"], 3)
def test_generic(self): architecture = Architecture.find("88f6281", syno=True) build = BuildFactory( active=True, version__report_url=None, architectures=[architecture], firmware=Firmware.find(1594), ) db.session.commit() self.assertEqual(Download.query.count(), 0) response = self.client.get( url_for( "nas.download", architecture_id=architecture.id, firmware_build=4458, build_id=build.id, ), environ_base={"REMOTE_ADDR": "127.0.0.1"}, headers={"User-Agent": "My User Agent"}, ) self.assert302(response) self.assertEqual(Download.query.count(), 1) download = Download.query.first() self.assertEqual(download.ip_address, "127.0.0.1") self.assertEqual(download.user_agent, "My User Agent") self.assertEqual(download.firmware_build, 4458) self.assertAlmostEqual( download.date, datetime.utcnow().replace(microsecond=0), delta=timedelta(seconds=10), )
class QueryFactory(factory.DictFactory): timezone = fake.timezone().split('/')[1] language = factory.LazyAttribute( lambda x: random.choice([l.code for l in Language.query.all()])) arch = factory.LazyAttribute(lambda x: random.choice([ Architecture.to_syno.get(a.code, a.code) for a in Architecture.query. filter(Architecture.code != 'noarch').all() ])) build = factory.LazyAttribute( lambda x: random.choice([f.build for f in Firmware.query.all()])) major = factory.LazyAttribute( lambda x: int(Firmware.find(x.build).version.split('.')[0])) minor = factory.LazyAttribute( lambda x: int(Firmware.find(x.build).version.split('.')[1])) unique = factory.LazyAttribute(lambda x: 'synology_%s_%s' % ( x.arch, str(random.choice([1, 2, 4, 15, 18, 24])) + str( random.choice([12, 13, 14, 15])) + random.choice(['', 'j', '+']))) package_update_channel = factory.fuzzy.FuzzyChoice(['stable', 'beta'])
def test_incorrect_firmware_build(self): architecture = Architecture.find('88f6281', syno=True) build = BuildFactory(active=True, version__report_url=None, architectures=[architecture], firmware=Firmware.find(1594)) db.session.commit() self.assertEqual(Download.query.count(), 0) response = self.client.get(url_for('nas.download', architecture_id=architecture.id, firmware_build=1593, build_id=build.id)) self.assert400(response) self.assertEqual(Download.query.count(), 0)
def test_not_stable_build_not_active_stable(self): BuildFactory(active=False, version__report_url=None, architectures=[Architecture.find('88f6281', syno=True)], firmware=Firmware.find(1594)) db.session.commit() data = dict(arch='88f6281', build='1594', language='enu', package_update_channel='beta') response = self.client.post(url_for('nas.catalog'), data=data) self.assert200(response) self.assertHeader(response, 'Content-Type', 'application/json') catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 0)
def test_stable_build_active_not_stable(self): BuildFactory(active=True, architectures=[Architecture.find('88f6281', syno=True)], firmware=Firmware.find(1594)) db.session.commit() data = dict(arch='88f6281', build='1594', language='enu') response = self.client.post(url_for('nas.catalog'), data=data) self.assert200(response) self.assertHeader(response, 'Content-Type', 'application/json') catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 0)
def test_post_unknown_firmware(self): user = UserFactory(roles=[Role.find('developer')]) db.session.commit() build = BuildFactory.build(firmware=Firmware(version='1.0', build=421)) with create_spk(build) as spk: response = self.client.post(url_for('api.packages'), headers=authorization_header(user), data=spk.read()) self.assert422(response) self.assertIn('Unknown firmware', response.data.decode(response.charset))
def test_stable_build_active_stable_qinst(self): build = BuildFactory(active=True, version__report_url=None, version__license=None, version__install_wizard=False, architectures=[Architecture.find('88f6281', syno=True)], firmware=Firmware.find(1594)) db.session.commit() data = dict(arch='88f6281', build='1594', language='enu') response = self.client.post(url_for('nas.catalog'), data=data) self.assert200(response) self.assertHeader(response, 'Content-Type', 'application/json') catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 1) self.assertCatalogEntry(catalog[0], build, data, dict(arch='88f628x', build='1594'))
def test_stable_build_active_not_stable(self): BuildFactory( active=True, architectures=[Architecture.find("88f6281", syno=True)], firmware=Firmware.find(1594), ) db.session.commit() data = dict(arch="88f6281", build="1594", language="enu") response = self.client.post(url_for("nas.catalog"), data=data) self.assert200(response) self.assertHeader(response, "Content-Type", "application/json") catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 0)
def test_post_invalid_firmware(self): user = UserFactory(roles=[Role.find("developer")]) db.session.commit() build = BuildFactory.build(firmware=Firmware(version="1.0", build=42)) with create_spk(build) as spk: response = self.client.post( url_for("api.packages"), headers=authorization_header(user), data=spk.read(), ) self.assert422(response) self.assertIn("Invalid firmware", response.data.decode(response.charset))
def test_incorrect_firmware_build(self): architecture = Architecture.find('88f6281', syno=True) build = BuildFactory(active=True, version__report_url=None, architectures=[architecture], firmware=Firmware.find(1594)) db.session.commit() self.assertEqual(Download.query.count(), 0) response = self.client.get( url_for('nas.download', architecture_id=architecture.id, firmware_build=1593, build_id=build.id)) self.assert400(response) self.assertEqual(Download.query.count(), 0)
def test_generic(self): architecture = Architecture.find('88f6281', syno=True) build = BuildFactory(active=True, version__report_url=None, architectures=[architecture], firmware=Firmware.find(1594)) db.session.commit() self.assertEqual(Download.query.count(), 0) response = self.client.get(url_for('nas.download', architecture_id=architecture.id, firmware_build=4458, build_id=build.id), environ_base={'REMOTE_ADDR': '127.0.0.1'}, headers={'User-Agent': 'My User Agent'}) self.assert302(response) self.assertEqual(Download.query.count(), 1) download = Download.query.first() self.assertEqual(download.ip_address, '127.0.0.1') self.assertEqual(download.user_agent, 'My User Agent') self.assertEqual(download.firmware_build, 4458) self.assertAlmostEqual(download.date, datetime.utcnow().replace(microsecond=0), delta=timedelta(seconds=10))
def test_stable_build_active_stable_qinst(self): build = BuildFactory( active=True, version__report_url=None, version__license=None, version__install_wizard=False, architectures=[Architecture.find('88f6281', syno=True)], firmware=Firmware.find(1594)) db.session.commit() data = dict(arch='88f6281', build='1594', language='enu') response = self.client.post(url_for('nas.catalog'), data=data) self.assert200(response) self.assertHeader(response, 'Content-Type', 'application/json') catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 1) self.assertCatalogEntry(catalog[0], build, data, dict(arch='88f628x', build='1594'))
def test_stable_build_active_stable_5004(self): build = BuildFactory( active=True, version__report_url=None, architectures=[Architecture.find("88f6281", syno=True)], firmware=Firmware.find(1594), ) db.session.commit() data = dict(arch="88f6281", build="5004", language="enu") response = self.client.post(url_for("nas.catalog"), data=data) self.assert200(response) self.assertHeader(response, "Content-Type", "application/json") catalog = json.loads(response.data.decode(response.charset)) self.assertIn("packages", catalog) self.assertIn("keyrings", catalog) self.assertEqual(len(catalog["packages"]), 1) self.assertCatalogEntry(catalog["packages"][0], build, data, dict(arch="88f628x", build="5004"))
def test_incorrect_architecture(self): architecture = Architecture.find("88f6281", syno=True) build = BuildFactory( active=True, version__report_url=None, architectures=[architecture], firmware=Firmware.find(1594), ) db.session.commit() self.assertEqual(Download.query.count(), 0) response = self.client.get( url_for( "nas.download", architecture_id=Architecture.find("cedarview").id, firmware_build=4458, build_id=build.id, )) self.assert400(response) self.assertEqual(Download.query.count(), 0)
def test_stable_build_active_stable_download_count(self): package = PackageFactory() build = BuildFactory(active=True, version__report_url=None, version__package=package, architectures=[Architecture.find('cedarview')], firmware=Firmware.find(1594)) DownloadFactory.create_batch(1, build=build, date=datetime.now()) DownloadFactory.create_batch(2, build=build, date=datetime.now() - timedelta(days=30)) DownloadFactory.create_batch(4, build=build, date=datetime.now() - timedelta(days=100)) db.session.commit() data = dict(arch='cedarview', build='1594', language='enu') response = self.client.post(url_for('nas.catalog'), data=data) self.assert200(response) self.assertHeader(response, 'Content-Type', 'application/json') catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 1) self.assertEqual(catalog[0]['download_count'], 7) self.assertEqual(catalog[0]['recent_download_count'], 3)
def test_stable_build_active_stable_null_data(self): build = BuildFactory(active=True, version__report_url=None, version__changelog=None, version__distributor=None, version__distributor_url=None, version__maintainer=None, version__maintainer_url=None, version__service_dependencies=[], version__dependencies=None, version__conflicts=None, version__package__add_screenshot=False, architectures=[Architecture.find('88f6281', syno=True)], firmware=Firmware.find(1594)) db.session.commit() data = dict(arch='88f6281', build='1594', language='enu') response = self.client.post(url_for('nas.catalog'), data=data) self.assert200(response) self.assertHeader(response, 'Content-Type', 'application/json') catalog = json.loads(response.data.decode(response.charset)) self.assertEqual(len(catalog), 1) self.assertCatalogEntry(catalog[0], build, data, dict(arch='88f628x', build='1594'))