Example #1
0
    def test_revision_origin_browse(self, origin):

        snapshot = self.snapshot_get_latest(origin['id'])
        revision = snapshot['branches']['HEAD']['target']
        revision_data = self.revision_get(revision)
        dir_id = revision_data['directory']

        origin_directory_url = reverse('browse-origin-directory',
                                       url_args={'origin_url': origin['url']},
                                       query_params={'revision': revision})

        origin_revision_log_url = reverse('browse-origin-log',
                                          url_args={'origin_url': origin['url']}, # noqa
                                          query_params={'revision': revision})

        url = reverse('browse-revision',
                      url_args={'sha1_git': revision},
                      query_params={'origin': origin['url']})

        resp = self.client.get(url)

        self.assertContains(resp, origin_directory_url)

        self.assertContains(resp, origin_revision_log_url)

        for parent in revision_data['parents']:
            parent_url = reverse('browse-revision',
                                 url_args={'sha1_git': parent},
                                 query_params={'origin': origin['url']})
            self.assertContains(resp, '<a href="%s">%s</a>' %
                                (parent_url, parent))

        self.assertContains(resp, 'vault-cook-directory')
        self.assertContains(resp, 'vault-cook-revision')

        swh_rev_id = get_swh_persistent_id('revision', revision)
        swh_rev_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_rev_id})
        self.assertContains(resp, swh_rev_id)
        self.assertContains(resp, swh_rev_id_url)

        swh_dir_id = get_swh_persistent_id('directory', dir_id)
        swh_dir_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_dir_id})
        self.assertContains(resp, swh_dir_id)
        self.assertContains(resp, swh_dir_id_url)

        self.assertContains(resp, 'swh-take-new-snapshot')
Example #2
0
    def test_content_view_text_no_highlight(self, content):

        sha1_git = content['sha1_git']

        url = reverse('browse-content',
                      url_args={'query_string': content['sha1']})

        url_raw = reverse('browse-content-raw',
                          url_args={'query_string': content['sha1']})

        resp = self.client.get(url)

        content_display = self._process_content_for_display(content)

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('browse/content.html')

        self.assertContains(resp, '<code class="nohighlight">')
        self.assertContains(resp,
                            escape(content_display['content_data']))  # noqa
        self.assertContains(resp, url_raw)

        swh_cnt_id = get_swh_persistent_id('content', sha1_git)
        swh_cnt_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_cnt_id})

        self.assertContains(resp, swh_cnt_id)
        self.assertContains(resp, swh_cnt_id_url)
Example #3
0
    def test_content_view_text(self, content):

        sha1_git = content['sha1_git']

        url = reverse('browse-content',
                      url_args={'query_string': content['sha1']},
                      query_params={'path': content['path']})

        url_raw = reverse('browse-content-raw',
                          url_args={'query_string': content['sha1']})

        resp = self.client.get(url)

        content_display = self._process_content_for_display(content)
        mimetype = content_display['mimetype']

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('browse/content.html')

        if mimetype.startswith('text/'):
            self.assertContains(
                resp, '<code class="%s">' % content_display['language'])
            self.assertContains(resp, escape(content_display['content_data']))
        self.assertContains(resp, url_raw)

        swh_cnt_id = get_swh_persistent_id('content', sha1_git)
        swh_cnt_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_cnt_id})
        self.assertContains(resp, swh_cnt_id)
        self.assertContains(resp, swh_cnt_id_url)
Example #4
0
    def test_get_swh_persistent_id(self):
        swh_object_type = 'content'
        sha1_git = 'aafb16d69fd30ff58afdd69036a26047f3aebdc6'

        expected_swh_id = 'swh:1:cnt:' + sha1_git

        self.assertEqual(
            utils.get_swh_persistent_id(swh_object_type, sha1_git),  # noqa
            expected_swh_id)

        with self.assertRaises(BadInputExc) as cm:
            utils.get_swh_persistent_id('foo', sha1_git)
        self.assertIn('Invalid object', cm.exception.args[0])

        with self.assertRaises(BadInputExc) as cm:
            utils.get_swh_persistent_id(swh_object_type, 'not a valid id')
        self.assertIn('Invalid object', cm.exception.args[0])
Example #5
0
def get_swh_persistent_ids(swh_objects, snapshot_context=None):
    """
    Returns a list of dict containing info related to persistent
    identifiers of swh objects.

    Args:
        swh_objects (list): a list of dict with the following keys:
            * type: swh object type (content/directory/release/revision/snapshot)
            * id: swh object id
        snapshot_context (dict): optional parameter describing the snapshot in which
            the object has been found

    Returns:
        list: a list of dict with the following keys:
            * object_type: the swh object type (content/directory/release/revision/snapshot)
            * object_icon: the swh object icon to use in HTML views
            * swh_id: the computed swh object persistent identifier
            * swh_id_url: the url resolving the persistent identifier
            * show_options: boolean indicating if the persistent id options must
              be displayed in persistent ids HTML view
    """ # noqa
    swh_ids = []
    for swh_object in swh_objects:
        if not swh_object['id']:
            continue
        swh_id = get_swh_persistent_id(swh_object['type'], swh_object['id'])
        show_options = swh_object['type'] == 'content' or \
            (snapshot_context and snapshot_context['origin_info'] is not None)

        object_icon = swh_object_icons[swh_object['type']]

        swh_ids.append({
            'object_type':
            swh_object['type'],
            'object_icon':
            object_icon,
            'swh_id':
            swh_id,
            'swh_id_url':
            reverse('browse-swh-id', url_args={'swh_id': swh_id}),
            'show_options':
            show_options
        })
    return swh_ids
Example #6
0
    def _release_browse_checks(self, resp, release_data, origin_info=None):

        query_params = {}
        if origin_info:
            query_params['origin'] = origin_info['url']

        release_id = release_data['id']
        release_name = release_data['name']
        author_id = release_data['author']['id']
        author_name = release_data['author']['name']
        author_url = reverse('browse-person',
                             url_args={'person_id': author_id},
                             query_params=query_params)

        release_date = release_data['date']
        message = release_data['message']
        target_type = release_data['target_type']
        target = release_data['target']

        target_url = reverse('browse-revision',
                             url_args={'sha1_git': target},
                             query_params=query_params)
        message_lines = message.split('\n')

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('browse/release.html')
        self.assertContains(resp,
                            '<a href="%s">%s</a>' % (author_url, author_name))
        self.assertContains(resp, format_utc_iso_date(release_date))
        self.assertContains(
            resp, '<h6>%s</h6>%s' %
            (message_lines[0] or 'None', '\n'.join(message_lines[1:])))
        self.assertContains(resp, release_id)
        self.assertContains(resp, release_name)
        self.assertContains(resp, target_type)
        self.assertContains(resp, '<a href="%s">%s</a>' % (target_url, target))

        swh_rel_id = get_swh_persistent_id('release', release_id)
        swh_rel_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_rel_id})
        self.assertContains(resp, swh_rel_id)
        self.assertContains(resp, swh_rel_id_url)
Example #7
0
    def origin_content_view_helper(self, origin_info, origin_visits,
                                   origin_branches, origin_releases,
                                   root_dir_sha1, content,
                                   visit_id=None, timestamp=None):

        content_path = '/'.join(content['path'].split('/')[1:])

        url_args = {'origin_type': origin_info['type'],
                    'origin_url': origin_info['url'],
                    'path': content_path}

        if not visit_id:
            visit_id = origin_visits[-1]['visit']

        query_params = {}

        if timestamp:
            url_args['timestamp'] = timestamp

        if visit_id:
            query_params['visit_id'] = visit_id

        url = reverse('browse-origin-content',
                      url_args=url_args,
                      query_params=query_params)

        resp = self.client.get(url)

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('content.html')

        self.assertContains(resp, '<code class="%s">' %
                                  content['hljs_language'])
        self.assertContains(resp, escape(content['data']))

        split_path = content_path.split('/')

        filename = split_path[-1]
        path = content_path.replace(filename, '')[:-1]

        path_info = gen_path_info(path)

        del url_args['path']

        if timestamp:
            url_args['timestamp'] = \
                format_utc_iso_date(parse_timestamp(timestamp).isoformat(),
                                    '%Y-%m-%dT%H:%M:%S')

        root_dir_url = reverse('browse-origin-directory',
                               url_args=url_args,
                               query_params=query_params)

        self.assertContains(resp, '<li class="swh-path">',
                            count=len(path_info)+1)

        self.assertContains(resp, '<a href="%s">%s</a>' %
                            (root_dir_url, root_dir_sha1[:7]))

        for p in path_info:
            url_args['path'] = p['path']
            dir_url = reverse('browse-origin-directory',
                              url_args=url_args,
                              query_params=query_params)
            self.assertContains(resp, '<a href="%s">%s</a>' %
                                (dir_url, p['name']))

        self.assertContains(resp, '<li>%s</li>' % filename)

        query_string = 'sha1_git:' + content['sha1_git']

        url_raw = reverse('browse-content-raw',
                          url_args={'query_string': query_string},
                          query_params={'filename': filename})
        self.assertContains(resp, url_raw)

        if 'args' in url_args:
            del url_args['path']

        origin_branches_url = reverse('browse-origin-branches',
                                      url_args=url_args,
                                      query_params=query_params)

        self.assertContains(resp, '<a href="%s">Branches (%s)</a>' %
                                  (origin_branches_url, len(origin_branches)))

        origin_releases_url = reverse('browse-origin-releases',
                                      url_args=url_args,
                                      query_params=query_params)

        self.assertContains(resp, '<a href="%s">Releases (%s)</a>' %
                                  (origin_releases_url, len(origin_releases)))

        self.assertContains(resp, '<li class="swh-branch">',
                            count=len(origin_branches))

        url_args['path'] = content_path

        for branch in origin_branches:
            query_params['branch'] = branch['name']
            root_dir_branch_url = reverse('browse-origin-content',
                                          url_args=url_args,
                                          query_params=query_params)

        self.assertContains(resp, '<a href="%s">' % root_dir_branch_url)

        self.assertContains(resp, '<li class="swh-release">',
                            count=len(origin_releases))

        query_params['branch'] = None
        for release in origin_releases:
            query_params['release'] = release['name']
            root_dir_release_url = reverse('browse-origin-content',
                                           url_args=url_args,
                                           query_params=query_params)

            self.assertContains(resp, '<a href="%s">' % root_dir_release_url)

        del url_args['origin_type']

        url = reverse('browse-origin-content',
                      url_args=url_args,
                      query_params=query_params)

        resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('content.html')

        swh_cnt_id = get_swh_persistent_id('content', content['sha1_git'])
        swh_cnt_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_cnt_id})
        self.assertContains(resp, swh_cnt_id)
        self.assertContains(resp, swh_cnt_id_url)

        self.assertContains(resp, 'swh-take-new-snapshot')
Example #8
0
    def origin_directory_view_helper(self, origin_info, origin_visits,
                                     origin_branches, origin_releases,
                                     root_directory_sha1, directory_entries,
                                     visit_id=None, timestamp=None, path=None):

        dirs = [e for e in directory_entries
                if e['type'] in ('dir', 'rev')]
        files = [e for e in directory_entries
                 if e['type'] == 'file']

        if not visit_id:
            visit_id = origin_visits[-1]['visit']

        url_args = {'origin_url': origin_info['url']}

        query_params = {}

        if timestamp:
            url_args['timestamp'] = timestamp
        else:
            query_params['visit_id'] = visit_id

        if path:
            url_args['path'] = path

        url = reverse('browse-origin-directory',
                      url_args=url_args,
                      query_params=query_params)

        resp = self.client.get(url)

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('directory.html')

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('directory.html')

        self.assertContains(resp, '<td class="swh-directory">',
                            count=len(dirs))
        self.assertContains(resp, '<td class="swh-content">',
                            count=len(files))

        if timestamp:
            url_args['timestamp'] = \
                format_utc_iso_date(parse_timestamp(timestamp).isoformat(),
                                    '%Y-%m-%dT%H:%M:%S')

        for d in dirs:
            if d['type'] == 'rev':
                dir_url = reverse('browse-revision',
                                  url_args={'sha1_git': d['target']})
            else:
                dir_path = d['name']
                if path:
                    dir_path = "%s/%s" % (path, d['name'])
                dir_url_args = dict(url_args)
                dir_url_args['path'] = dir_path
                dir_url = reverse('browse-origin-directory',
                                  url_args=dir_url_args,
                                  query_params=query_params)
            self.assertContains(resp, dir_url)

        for f in files:
            file_path = f['name']
            if path:
                file_path = "%s/%s" % (path, f['name'])
            file_url_args = dict(url_args)
            file_url_args['path'] = file_path
            file_url = reverse('browse-origin-content',
                               url_args=file_url_args,
                               query_params=query_params)
            self.assertContains(resp, file_url)

        if 'path' in url_args:
            del url_args['path']

        root_dir_branch_url = \
            reverse('browse-origin-directory',
                    url_args=url_args,
                    query_params=query_params)

        nb_bc_paths = 1
        if path:
            nb_bc_paths = len(path.split('/')) + 1

        self.assertContains(resp, '<li class="swh-path">', count=nb_bc_paths)
        self.assertContains(resp, '<a href="%s">%s</a>' %
                                  (root_dir_branch_url,
                                   root_directory_sha1[:7]))

        origin_branches_url = reverse('browse-origin-branches',
                                      url_args=url_args,
                                      query_params=query_params)

        self.assertContains(resp, '<a href="%s">Branches (%s)</a>' %
                                  (origin_branches_url, len(origin_branches)))

        origin_releases_url = reverse('browse-origin-releases',
                                      url_args=url_args,
                                      query_params=query_params)

        nb_releases = len(origin_releases)
        if nb_releases > 0:
            self.assertContains(resp, '<a href="%s">Releases (%s)</a>' %
                                      (origin_releases_url, nb_releases))

        if path:
            url_args['path'] = path

        self.assertContains(resp, '<li class="swh-branch">',
                            count=len(origin_branches))

        for branch in origin_branches:
            query_params['branch'] = branch['name']
            root_dir_branch_url = \
                reverse('browse-origin-directory',
                        url_args=url_args,
                        query_params=query_params)

            self.assertContains(resp, '<a href="%s">' % root_dir_branch_url)

        self.assertContains(resp, '<li class="swh-release">',
                            count=len(origin_releases))

        query_params['branch'] = None
        for release in origin_releases:
            query_params['release'] = release['name']
            root_dir_release_url = \
                reverse('browse-origin-directory',
                        url_args=url_args,
                        query_params=query_params)

            self.assertContains(resp, '<a href="%s">' % root_dir_release_url)

        self.assertContains(resp, 'vault-cook-directory')
        self.assertContains(resp, 'vault-cook-revision')

        swh_dir_id = get_swh_persistent_id('directory', directory_entries[0]['dir_id']) # noqa
        swh_dir_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_dir_id})
        self.assertContains(resp, swh_dir_id)
        self.assertContains(resp, swh_dir_id_url)

        self.assertContains(resp, 'swh-take-new-snapshot')
Example #9
0
    def directory_view(self,
                       root_directory_sha1,
                       directory_entries,
                       path=None):
        dirs = [e for e in directory_entries if e['type'] in ('dir', 'rev')]
        files = [e for e in directory_entries if e['type'] == 'file']

        url_args = {'sha1_git': root_directory_sha1}
        if path:
            url_args['path'] = path

        url = reverse('browse-directory', url_args=url_args)

        root_dir_url = reverse('browse-directory',
                               url_args={'sha1_git': root_directory_sha1})

        resp = self.client.get(url)

        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed('browse/directory.html')
        self.assertContains(
            resp, '<a href="' + root_dir_url + '">' + root_directory_sha1[:7] +
            '</a>')
        self.assertContains(resp,
                            '<td class="swh-directory">',
                            count=len(dirs))
        self.assertContains(resp, '<td class="swh-content">', count=len(files))

        for d in dirs:
            if d['type'] == 'rev':
                dir_url = reverse('browse-revision',
                                  url_args={'sha1_git': d['target']})
            else:
                dir_path = d['name']
                if path:
                    dir_path = "%s/%s" % (path, d['name'])
                dir_url = reverse('browse-directory',
                                  url_args={
                                      'sha1_git': root_directory_sha1,
                                      'path': dir_path
                                  })
            self.assertContains(resp, dir_url)

        for f in files:
            file_path = "%s/%s" % (root_directory_sha1, f['name'])
            if path:
                file_path = "%s/%s/%s" % (root_directory_sha1, path, f['name'])
            query_string = 'sha1_git:' + f['target']
            file_url = reverse('browse-content',
                               url_args={'query_string': query_string},
                               query_params={'path': file_path})
            self.assertContains(resp, file_url)

        path_info = gen_path_info(path)

        self.assertContains(resp,
                            '<li class="swh-path">',
                            count=len(path_info) + 1)
        self.assertContains(
            resp,
            '<a href="%s">%s</a>' % (root_dir_url, root_directory_sha1[:7]))

        for p in path_info:
            dir_url = reverse('browse-directory',
                              url_args={
                                  'sha1_git': root_directory_sha1,
                                  'path': p['path']
                              })
            self.assertContains(resp,
                                '<a href="%s">%s</a>' % (dir_url, p['name']))

        self.assertContains(resp, 'vault-cook-directory')

        swh_dir_id = get_swh_persistent_id(
            'directory', directory_entries[0]['dir_id'])  # noqa
        swh_dir_id_url = reverse('browse-swh-id',
                                 url_args={'swh_id': swh_dir_id})
        self.assertContains(resp, swh_dir_id)
        self.assertContains(resp, swh_dir_id_url)