Exemplo n.º 1
0
    def test_manager_filtering(self):
        Package(author=self.author, type='a').save()
        Package(author=self.author, type='a').save()
        Package(author=self.author, type='l').save()

        self.assertEqual(Package.objects.addons().count(), 2)
        self.assertEqual(Package.objects.libraries().count(), 3)
Exemplo n.º 2
0
 def test_duplicate_packages_integrity_error(self):
     # duplicate packages are denied on MySQL level
     author = User.objects.get(username='******')
     addon = Package(full_name='Integrity Error', author=author, type='a')
     addon.save()
     backup = Package.full_clean
     Package.full_clean = Mock()
     addon2 = Package(full_name='Integrity Error', author=author, type='a')
     self.assertRaises(IntegrityError, addon2.save)
     Package.full_clean = backup
Exemplo n.º 3
0
    def test_first_addon_template(self):
        author = User.objects.create(username='******')
        addon = Package(full_name='First Addon', author=author, type='a')
        addon.save()
        mod = addon.latest.modules.all()[0]
        assert 'id: "first-addon-widget' in mod.code

        addon2 = Package(full_name='Second Addon', author=author, type='a')
        addon2.save()
        mod2 = addon2.latest.modules.all()[0]
        assert 'id: "second-addon-widget' not in mod2.code
Exemplo n.º 4
0
 def test_ordering(self):
     " Newest is first "
     addon1 = Package(author=self.author, type='a')
     addon1.save()
     addon2 = Package(author=self.author, type='a')
     addon2.save()
     # My Addon should be second
     # but because in the test these are so close and we're testing in
     # mutithreaded MySQL it could be different. It would be fair to assume
     # one of these will be (1) and the other not
     names = (addon1.full_name, addon2.full_name)
     self.failUnless('%s (1)' % self.author.username in names)
     self.failUnless('%s' % self.author.username in names)
Exemplo n.º 5
0
    def test_dashboard_with_broken_package(self):
        # fixable add-on - no latest given
        author = User.objects.get(username='******')
        addon = Package(full_name='NOLATEST', author=author, type='a')
        addon.save()
        # adding a new version
        addon.latest.save()
        eq_(addon.revisions.count(), 2)
        addon.latest.set_version('1.0')
        latest = addon.latest
        # removing addon.latest
        addon.latest = None
        addon.version = None
        addon.save()
        assert not addon.latest
        self.assertRaises(UndefinedError, self.client.get,
                          author.get_profile().get_profile_url())
        # fix latest will assign last revision to latest
        addon.fix_latest()
        response = self.client.get(author.get_profile().get_profile_url())
        eq_(response.status_code, 200)
        addon = Package.objects.get(full_name='NOLATEST')
        assert addon.latest
        eq_(addon.latest, latest)
        self.assertRaises(AttributeError, addon.latest.get_absolute_url)
        # fix version will assign revision with a highest version_name to
        # version
        addon.fix_version()
        eq_(response.status_code, 200)
        addon = Package.objects.get(full_name='NOLATEST')
        assert addon.version
        eq_(addon.version.version_name, '1.0')

        # package with no version at all
        post_save.disconnect(save_first_revision, sender=Package)
        addon = Package(full_name='NOREVISION',
                        name='broken',
                        author=author,
                        type='a')
        addon.save()
        post_save.connect(save_first_revision, sender=Package)
        assert not addon.latest
        self.assertRaises(UndefinedError, self.client.get,
                          author.get_profile().get_profile_url())
        # fix latest (it will remove the package)
        addon.fix_latest()
        response = self.client.get(author.get_profile().get_profile_url())
        eq_(response.status_code, 200)
        self.assertRaises(Package.DoesNotExist,
                          Package.objects.get,
                          full_name='NOREVISION')
Exemplo n.º 6
0
    def test_save(self):
        # system should create new revision on save
        addon = Package(author=self.author, type='a')
        addon.save()
        revisions = PackageRevision.objects.filter(package__name=addon.name)
        first = revisions[0]
        first.save()
        revisions = PackageRevision.objects.filter(package__name=addon.name)
        eq_(2, revisions.count())

        # first is not the same package anymore and it does not have
        # the version_name parameter
        eq_(None, first.version_name)

        # "old" addon doesn't know about the changes
        self.assertNotEqual(addon.latest.revision_number,
                            first.revision_number)

        # reloading addon to update changes
        addon = first.package

        # first is the latest
        eq_(addon.latest.revision_number,
                         first.revision_number)
        self.assertNotEqual(addon.version.revision_number,
                            addon.latest.revision_number)
Exemplo n.º 7
0
 def test_package_jid_change(self):
     jid = 'somejid'
     author = self._login()
     addon1 = Package(author=author, type='a')
     addon1.save()
     response = self.client.post(addon1.latest.get_save_url(), {'jid': jid})
     eq_(response.status_code, 200)
     addon2 = Package.objects.get(pk=addon1.pk)
     # no change in revision
     eq_(len(addon2.revisions.all()), 1)
     eq_(addon2.jid, jid)
     # check adding an existing JID
     addon3 = Package(author=author, type='a')
     addon3.save()
     response = self.client.post(addon1.latest.get_save_url(), {'jid': jid})
     eq_(response.status_code, 403)
Exemplo n.º 8
0
    def test_duplicate_packages_name_interation(self):
        # duplicate packages are denied on MySQL level
        author = User.objects.get(username='******')
        addon = Package(full_name='Integrity Error', author=author, type='a')
        addon.save()
        eq_(addon.latest.name, 'integrity-error')

        addon2 = Package(full_name='Integrity Error', author=author, type='a')

        addon2.save()
        eq_(addon2.latest.name, 'john')

        addon3 = Package(full_name='Integrity Error', author=author, type='a')

        addon3.save()
        eq_(addon3.latest.name, 'john-1')
Exemplo n.º 9
0
    def test_addon_creation(self):
        package = Package(author=self.author, type='a')
        package.save()
        # all packages have assigned an incremental id_number
        assert package.id_number
        eq_(int(package.id_number), settings.MINIMUM_PACKAGE_ID + 1)
        # all add-ons have PackageRevision created
        assert package.version
        assert package.latest
        eq_(package.version.id, package.latest.id)
        # name is created automtically if no given
        assert package.full_name
        assert package.name
        eq_(package.full_name, self.author.username)
        # test preventing inserting duplicates
        assert Package.objects.get(author=self.author,
                                   type='a',
                                   full_name=package.name)
        p = Package.objects.create(author=self.author,
                                   type='a',
                                   full_name=package.name)

        #test package name iteration
        eq_('john-1', p.name)
        eq_('john', package.name)
Exemplo n.º 10
0
    def test_adding_extra_package_properties(self):
        addon = Package(type='a', author=self.author)
        addon.save()
        pk = addon.pk
        rev = addon.latest

        rev.set_extra_json('''
        {
            "preferences": [{
                "name": "example",
                "type": "string",
                "title": "foo",
                "value": "bar"
            }],
            "id": "baz"
        }
        ''')

        addon = Package.objects.get(pk=pk) # breaking cache
        manifest = addon.latest.get_manifest()
        assert 'preferences' in manifest
        eq_(manifest['preferences'][0]['name'], 'example')

        # user-provide values don't override our generated ones
        self.assertNotEqual(manifest['id'], 'baz')

        assert 'Extra JSON' in addon.latest.commit_message
Exemplo n.º 11
0
    def test_outdated_dependencies_with_conflicts(self):
        addon = Package.objects.create(author=self.author, type='a')
        lib = Package.objects.create(author=self.author, type='l')
        addon.latest.dependency_add(lib.latest)

        jan = User.objects.get(username='******')
        jan_lib = Package(author=jan, type='l', full_name='janjanjan')
        jan_lib.save()
        dupe_lib = Package(author=jan, type='l', full_name=lib.full_name)
        dupe_lib.save()

        addon.latest.dependency_add(jan_lib.latest)

        jan_lib.latest.dependency_add(dupe_lib.latest)
        out_of_date = addon.latest.get_outdated_dependency_versions()

        eq_(len(out_of_date), 0)
Exemplo n.º 12
0
 def test_prepare_zip_file(self):
     author = User.objects.get(username='******')
     addon = Package(author=author, type='a')
     addon.save()
     prepare_url = addon.latest.get_prepare_zip_url()
     response = self.client.post(prepare_url, {'hashtag': self.hashtag})
     eq_(response.status_code, 200)
     eq_(response.content, '{"delayed": true}')
Exemplo n.º 13
0
    def test_library_creation_with_nickname(self):
        profile = self.author.get_profile()
        profile.nickname = 'Samuel'
        profile.save()

        package = Package(author=self.author, type='l')
        package.save()

        eq_(package.full_name, 'Samuel-lib')
Exemplo n.º 14
0
    def test_adding_libs_with_common_dependency(self):
        # if B and C both depend on D, at the same version, then it should
        # be able to add both to A
        addon = Package(author=self.author, type='a')
        addon.save()
        lib1 = Package(author=self.author, type='l')
        lib1.save()
        lib2 = Package(author=self.author, type='l')
        lib2.save()
        lib3 = Package(author=self.author, type='l')
        lib3.save()

        lib1.latest.dependency_add(lib3.latest)
        lib2.latest.dependency_add(lib3.latest)

        addon.latest.dependency_add(lib1.latest)
        addon.latest.dependency_add(lib2.latest)

        assert True
Exemplo n.º 15
0
 def test_download_zip_file(self):
     author = User.objects.get(username='******')
     addon = Package(author=author, type='a')
     addon.save()
     addon.latest.zip_source(hashtag=self.hashtag)
     download_url = reverse('jp_revision_download_zip',
                            args=[self.hashtag, 'x'])
     response = self.client.get(download_url)
     eq_(response.status_code, 200)
     eq_(response['Content-Disposition'], 'attachment; filename="x.zip"')
Exemplo n.º 16
0
    def test_package_invalid_extra_json(self):
        author = self._login()
        addon = Package(author=author, type='a')
        addon.save()

        extra_json = '{ foo: bar }'
        response = self.client.post(addon.latest.get_save_url(),
                                    {'package_extra_json': extra_json})

        eq_(response.status_code, 400)
        assert 'invalid JSON' in response.content
Exemplo n.º 17
0
    def test_manager_sort_recently_active(self):
        p1 = Package(author=self.author, type='a')
        p1.save()
        p2 = Package(author=self.author, type='a')
        p2.save()
        Package(author=self.author, type='l').save()

        p1rev2 = PackageRevision(author=self.author, revision_number=2)
        p1.revisions.add(p1rev2)
        p1rev2.created_at = datetime.datetime.now() - datetime.timedelta(60)
        super(PackageRevision, p1rev2).save()

        p2rev = p2.revisions.all()[0]
        p2rev.save()  #makes a new revision

        qs = Package.objects.sort_recently_active().filter(type='a')
        eq_(qs.count(), 2)
        eq_(p2.id, qs[0].id)
        eq_(qs[0].rev_count, 2)
        eq_(qs[1].rev_count, 1)
Exemplo n.º 18
0
    def test_addon_creation_with_nickname(self):
        """In production if you log in with an AMO user, the username
        is set to a number and the nickname on the profile is set to the
        real username."""
        profile = self.author.get_profile()
        profile.nickname = 'Gordon'
        profile.save()

        package = Package(author=self.author, type='a')
        package.save()

        eq_(package.full_name, 'Gordon')
Exemplo n.º 19
0
 def test_revision_list_contains_added_modules(self):
     author = User.objects.get(username='******')
     addon = Package(author=author, type='a')
     addon.save()
     mod = Module.objects.create(filename='test_filename',
                                 author=author,
                                 code='// test')
     rev = addon.latest
     rev.module_add(mod)
     r = self.client.get(
         reverse('jp_revisions_list_html', args=[addon.latest.pk]))
     assert 'test_filename' in r.content
Exemplo n.º 20
0
 def test_check_zip_file(self):
     author = User.objects.get(username='******')
     addon = Package(author=author, type='a')
     addon.save()
     check_url = reverse('jp_revision_check_zip', args=[
         self.hashtag,
     ])
     response = self.client.get(check_url)
     eq_(response.content, '{"ready": false}')
     addon.latest.zip_source(hashtag=self.hashtag)
     response = self.client.get(check_url)
     eq_(response.status_code, 200)
     eq_(response.content, '{"ready": true}')
Exemplo n.º 21
0
 def test_package_name_change(self):
     author = self._login()
     addon1 = Package(author=author, type='a')
     addon1.save()
     rev1 = addon1.latest
     log.debug(addon1.latest.get_save_url())
     response = self.client.post(addon1.latest.get_save_url(),
                                 {'full_name': 'FULL NAME'})
     eq_(response.status_code, 200)
     addon2 = Package.objects.get(pk=addon1.pk)
     eq_(len(addon2.revisions.all()), 2)
     eq_(addon2.full_name, addon2.latest.full_name)
     assert rev1.name != addon2.latest.name
Exemplo n.º 22
0
 def test_first_revision_creation(self):
     addon = Package(author=self.author, type='a')
     addon.save()
     revisions = PackageRevision.objects.filter(package__pk=addon.pk)
     eq_(1, revisions.count())
     revision = revisions[0]
     eq_(revision.full_name, addon.full_name)
     eq_(revision.name, addon.name)
     eq_(revision.author.username, addon.author.username)
     eq_(revision.revision_number, 0)
     eq_(revision.pk, addon.latest.pk)
     eq_(revision.pk, addon.version.pk)
     eq_(revision.name, addon.name)
Exemplo n.º 23
0
    def test_package_extra_json_change(self):
        author = self._login()
        addon = Package(author=author, type='a')
        addon.save()
        pk = addon.pk

        homepage = 'https://builder.addons.mozilla.org'
        extra_json = '{"homepage": "%s"}' % homepage
        response = self.client.post(addon.latest.get_save_url(),
                                    {'package_extra_json': extra_json})

        addon = Package.objects.get(pk=pk)  # old one is cached

        eq_(addon.latest.extra_json, extra_json)
Exemplo n.º 24
0
 def test_name_change(self):
     addon = Package(author=self.author, type='a')
     addon.save()
     revisionA = PackageRevision.objects.filter(package__pk=addon.pk)[0]
     addon.latest.set_full_name("TEST NAME CHANGE")
     addon.save()
     addon.latest.save()
     revisionB = PackageRevision.objects.filter(package__pk=addon.pk)[0]
     log.debug(revisionB.name)
     log.debug(addon.name)
     eq_(revisionB.name, addon.name)
     assert revisionA.pk != revisionB.pk
     assert revisionA.name != revisionB.name
     eq_(len(addon.revisions.all()), 2)
Exemplo n.º 25
0
    def test_adding_library_naming_conflict(self):
        " Check recurrent dependency (all levels) "
        john_lib = self.library
        john_lib2 = Package(author=self.author, type='l')
        john_lib2.save()

        jan = User.objects.get(username='******')
        jan_lib = Package(author=jan, type='l')
        jan_lib.save()
        jan_conflict = Package(author=jan, type='l', full_name=john_lib.full_name)
        jan_conflict.save()

        john_lib.latest.dependency_add(jan_lib.latest)

        addon = self.addon.latest
        addon.dependency_add(john_lib.latest)
        addon.dependency_add(jan_lib.latest)

        self.assertRaises(DependencyException, addon.dependency_add, jan_conflict.latest)


        john_lib2.latest.dependency_add(jan_conflict.latest)
        self.assertRaises(DependencyException, addon.dependency_add, john_lib2.latest)
Exemplo n.º 26
0
    def test_add_commit_message(self):
        author = User.objects.all()[0]
        addon = Package(type='a', author=author)
        addon.save()
        rev = addon.latest
        rev.add_commit_message('one')
        rev.add_commit_message('two')
        rev.save()

        eq_(rev.commit_message, 'one, two')

        # revision has been saved, so we should be building up a new commit message
        rev.add_commit_message('three')
        rev.save()
        eq_(rev.commit_message, 'three')
Exemplo n.º 27
0
    def test_package_sanitization(self):
        bad_text = u'Te$tąć"><script src="google.com"></script>!#'
        good_text = 'Te$tscript srcgoogle.com/script!#'
        good_text_utf8 = u'Te$tąćscript srcgoogle.com/script!#'

        package = Package(author=self.author,
                          type='a',
                          full_name=bad_text,
                          description=bad_text,
                          version_name=bad_text)
        package.save()

        eq_(package.full_name, good_text)
        eq_(package.description, good_text_utf8)
        eq_(package.version_name, good_text)
Exemplo n.º 28
0
    def test_set_version(self):
        addon = Package(author=self.author, type='a')
        addon.save()
        first = addon.latest
        old_id = first.id
        first.set_version('test')

        # setting version does not make new revision
        eq_(first.id, old_id)

        # setting version sets it for revision, package
        # and assigns revision to package
        eq_(first.version_name, 'test')
        eq_(first.package.version_name, 'test')
        eq_(first.package.version.pk, first.pk)
Exemplo n.º 29
0
 def test_copy_revision(self):
     author = User.objects.get(username='******')
     addon = Package(author=author, type='a')
     addon.save()
     # unauthenticated
     response = self.client.get(addon.latest.get_copy_url())
     eq_(response.status_code, 302)
     # authenticated
     author.set_password('secure')
     author.save()
     self.client.login(username=author.username, password='******')
     log.debug(addon.latest.get_copy_url())
     response = self.client.get(addon.latest.get_copy_url())
     eq_(response.status_code, 200)
     assert 'Add-on' in response.content
     assert 'copied' in response.content
Exemplo n.º 30
0
    def test_folder_added_when_attachments_removed(self):
        " EmptyDir's should be added if all attachments in a 'dir' are removed "
        addon = Package(author=self.author, type='a')
        addon.save()
        revision = PackageRevision.objects.filter(package__name=addon.name)[0]

        att = Attachment(filename='/'.join([self.path, 'helpers']),
                         author=self.author,
                         ext='js')
        att.save()
        revision.attachment_add(att)
        self.assertEqual(0, revision.folders.count())

        revision.attachment_remove(att)
        self.assertEqual(1, revision.folders.count())
        self.assertEqual(self.path, revision.folders.all()[0].name)