Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9313493
test_origin.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
32 KB
Subscribers
None
test_origin.py
View Options
# Copyright (C) 2017-2019 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU Affero General Public License version 3, or any later version
# See top-level LICENSE file for more information
import
random
import
re
from
django.utils.html
import
escape
from
hypothesis
import
given
from
swh.model.hashutil
import
hash_to_bytes
from
swh.web.browse.utils
import
process_snapshot_branches
from
swh.web.common.exc
import
NotFoundExc
from
swh.web.common.utils
import
(
reverse
,
gen_path_info
,
format_utc_iso_date
,
parse_timestamp
,
get_swh_persistent_id
)
from
swh.web.tests.data
import
get_content
from
swh.web.tests.django_asserts
import
assert_contains
,
assert_template_used
from
swh.web.tests.strategies
import
(
origin
,
origin_with_multiple_visits
,
new_origin
,
new_snapshot
,
visit_dates
,
revisions
)
@given
(
origin_with_multiple_visits
())
def
test_origin_visits_browse
(
client
,
archive_data
,
origin
):
url
=
reverse
(
'browse-origin-visits'
,
url_args
=
{
'origin_url'
:
origin
[
'url'
]})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'origin-visits.html'
)
url
=
reverse
(
'browse-origin-visits'
,
url_args
=
{
'origin_url'
:
origin
[
'url'
]})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'origin-visits.html'
)
visits
=
archive_data
.
origin_visit_get
(
origin
[
'url'
])
for
v
in
visits
:
vdate
=
format_utc_iso_date
(
v
[
'date'
],
'%Y-%m-
%d
T%H:%M:%SZ'
)
browse_dir_url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
origin
[
'url'
],
'timestamp'
:
vdate
})
assert_contains
(
resp
,
browse_dir_url
)
@given
(
origin_with_multiple_visits
())
def
test_origin_content_view
(
client
,
archive_data
,
origin
):
origin_visits
=
archive_data
.
origin_visit_get
(
origin
[
'url'
])
def
_get_archive_data
(
visit_idx
):
snapshot
=
archive_data
.
snapshot_get
(
origin_visits
[
visit_idx
][
'snapshot'
])
head_rev_id
=
archive_data
.
snapshot_get_head
(
snapshot
)
head_rev
=
archive_data
.
revision_get
(
head_rev_id
)
dir_content
=
archive_data
.
directory_ls
(
head_rev
[
'directory'
])
dir_files
=
[
e
for
e
in
dir_content
if
e
[
'type'
]
==
'file'
]
dir_file
=
random
.
choice
(
dir_files
)
branches
,
releases
=
process_snapshot_branches
(
snapshot
)
return
{
'branches'
:
branches
,
'releases'
:
releases
,
'root_dir_sha1'
:
head_rev
[
'directory'
],
'content'
:
get_content
(
dir_file
[
'checksums'
][
'sha1'
]),
'visit'
:
origin_visits
[
visit_idx
]
}
tdata
=
_get_archive_data
(
-
1
)
_origin_content_view_test_helper
(
client
,
origin
,
origin_visits
,
tdata
[
'branches'
],
tdata
[
'releases'
],
tdata
[
'root_dir_sha1'
],
tdata
[
'content'
])
_origin_content_view_test_helper
(
client
,
origin
,
origin_visits
,
tdata
[
'branches'
],
tdata
[
'releases'
],
tdata
[
'root_dir_sha1'
],
tdata
[
'content'
],
timestamp
=
tdata
[
'visit'
][
'date'
])
visit_unix_ts
=
parse_timestamp
(
tdata
[
'visit'
][
'date'
])
.
timestamp
()
visit_unix_ts
=
int
(
visit_unix_ts
)
_origin_content_view_test_helper
(
client
,
origin
,
origin_visits
,
tdata
[
'branches'
],
tdata
[
'releases'
],
tdata
[
'root_dir_sha1'
],
tdata
[
'content'
],
timestamp
=
visit_unix_ts
)
tdata
=
_get_archive_data
(
0
)
_origin_content_view_test_helper
(
client
,
origin
,
origin_visits
,
tdata
[
'branches'
],
tdata
[
'releases'
],
tdata
[
'root_dir_sha1'
],
tdata
[
'content'
],
visit_id
=
tdata
[
'visit'
][
'visit'
])
@given
(
origin
())
def
test_origin_root_directory_view
(
client
,
archive_data
,
origin
):
origin_visits
=
archive_data
.
origin_visit_get
(
origin
[
'url'
])
visit
=
origin_visits
[
-
1
]
snapshot
=
archive_data
.
snapshot_get
(
visit
[
'snapshot'
])
head_rev_id
=
archive_data
.
snapshot_get_head
(
snapshot
)
head_rev
=
archive_data
.
revision_get
(
head_rev_id
)
root_dir_sha1
=
head_rev
[
'directory'
]
dir_content
=
archive_data
.
directory_ls
(
root_dir_sha1
)
branches
,
releases
=
process_snapshot_branches
(
snapshot
)
visit_unix_ts
=
parse_timestamp
(
visit
[
'date'
])
.
timestamp
()
visit_unix_ts
=
int
(
visit_unix_ts
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
,
visit_id
=
visit
[
'visit'
])
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
,
timestamp
=
visit_unix_ts
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
,
timestamp
=
visit
[
'date'
])
origin
=
dict
(
origin
)
del
origin
[
'type'
]
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
,
visit_id
=
visit
[
'visit'
])
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
,
timestamp
=
visit_unix_ts
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
dir_content
,
timestamp
=
visit
[
'date'
])
@given
(
origin
())
def
test_origin_sub_directory_view
(
client
,
archive_data
,
origin
):
origin_visits
=
archive_data
.
origin_visit_get
(
origin
[
'url'
])
visit
=
origin_visits
[
-
1
]
snapshot
=
archive_data
.
snapshot_get
(
visit
[
'snapshot'
])
head_rev_id
=
archive_data
.
snapshot_get_head
(
snapshot
)
head_rev
=
archive_data
.
revision_get
(
head_rev_id
)
root_dir_sha1
=
head_rev
[
'directory'
]
subdirs
=
[
e
for
e
in
archive_data
.
directory_ls
(
root_dir_sha1
)
if
e
[
'type'
]
==
'dir'
]
branches
,
releases
=
process_snapshot_branches
(
snapshot
)
visit_unix_ts
=
parse_timestamp
(
visit
[
'date'
])
.
timestamp
()
visit_unix_ts
=
int
(
visit_unix_ts
)
if
len
(
subdirs
)
==
0
:
return
subdir
=
random
.
choice
(
subdirs
)
subdir_content
=
archive_data
.
directory_ls
(
subdir
[
'target'
])
subdir_path
=
subdir
[
'name'
]
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
,
visit_id
=
visit
[
'visit'
])
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
,
timestamp
=
visit_unix_ts
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
,
timestamp
=
visit
[
'date'
])
origin
=
dict
(
origin
)
del
origin
[
'type'
]
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
,
visit_id
=
visit
[
'visit'
])
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
,
timestamp
=
visit_unix_ts
)
_origin_directory_view_test_helper
(
client
,
origin
,
origin_visits
,
branches
,
releases
,
root_dir_sha1
,
subdir_content
,
path
=
subdir_path
,
timestamp
=
visit
[
'date'
])
@given
(
origin
())
def
test_origin_branches
(
client
,
archive_data
,
origin
):
origin_visits
=
archive_data
.
origin_visit_get
(
origin
[
'url'
])
visit
=
origin_visits
[
-
1
]
snapshot
=
archive_data
.
snapshot_get
(
visit
[
'snapshot'
])
snapshot_content
=
process_snapshot_branches
(
snapshot
)
_origin_branches_test_helper
(
client
,
origin
,
snapshot_content
)
origin
=
dict
(
origin
)
origin
[
'type'
]
=
None
_origin_branches_test_helper
(
client
,
origin
,
snapshot_content
)
@given
(
origin
())
def
test_origin_releases
(
client
,
archive_data
,
origin
):
origin_visits
=
archive_data
.
origin_visit_get
(
origin
[
'url'
])
visit
=
origin_visits
[
-
1
]
snapshot
=
archive_data
.
snapshot_get
(
visit
[
'snapshot'
])
snapshot_content
=
process_snapshot_branches
(
snapshot
)
_origin_releases_test_helper
(
client
,
origin
,
snapshot_content
)
origin
=
dict
(
origin
)
origin
[
'type'
]
=
None
_origin_releases_test_helper
(
client
,
origin
,
snapshot_content
)
@given
(
new_origin
(),
new_snapshot
(
min_size
=
4
,
max_size
=
4
),
visit_dates
(),
revisions
(
min_size
=
3
,
max_size
=
3
))
def
test_origin_snapshot_null_branch
(
client
,
archive_data
,
new_origin
,
new_snapshot
,
visit_dates
,
revisions
):
snp_dict
=
new_snapshot
.
to_dict
()
new_origin
=
archive_data
.
origin_add
([
new_origin
])[
0
]
for
i
,
branch
in
enumerate
(
snp_dict
[
'branches'
]
.
keys
()):
if
i
==
0
:
snp_dict
[
'branches'
][
branch
]
=
None
else
:
snp_dict
[
'branches'
][
branch
]
=
{
'target_type'
:
'revision'
,
'target'
:
hash_to_bytes
(
revisions
[
i
-
1
]),
}
archive_data
.
snapshot_add
([
snp_dict
])
visit
=
archive_data
.
origin_visit_add
(
new_origin
[
'url'
],
visit_dates
[
0
],
type
=
'git'
)
archive_data
.
origin_visit_update
(
new_origin
[
'url'
],
visit
[
'visit'
],
status
=
'partial'
,
snapshot
=
snp_dict
[
'id'
])
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
new_origin
[
'url'
]})
rv
=
client
.
get
(
url
)
assert
rv
.
status_code
==
200
@given
(
new_origin
(),
new_snapshot
(
min_size
=
4
,
max_size
=
4
),
visit_dates
(),
revisions
(
min_size
=
4
,
max_size
=
4
))
def
test_origin_snapshot_invalid_branch
(
client
,
archive_data
,
new_origin
,
new_snapshot
,
visit_dates
,
revisions
):
snp_dict
=
new_snapshot
.
to_dict
()
new_origin
=
archive_data
.
origin_add
([
new_origin
])[
0
]
for
i
,
branch
in
enumerate
(
snp_dict
[
'branches'
]
.
keys
()):
snp_dict
[
'branches'
][
branch
]
=
{
'target_type'
:
'revision'
,
'target'
:
hash_to_bytes
(
revisions
[
i
]),
}
archive_data
.
snapshot_add
([
snp_dict
])
visit
=
archive_data
.
origin_visit_add
(
new_origin
[
'url'
],
visit_dates
[
0
],
type
=
'git'
)
archive_data
.
origin_visit_update
(
new_origin
[
'url'
],
visit
[
'visit'
],
status
=
'full'
,
snapshot
=
snp_dict
[
'id'
])
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
new_origin
[
'url'
]},
query_params
=
{
'branch'
:
'invalid_branch'
})
rv
=
client
.
get
(
url
)
assert
rv
.
status_code
==
404
def
test_origin_request_errors
(
client
,
archive_data
,
mocker
):
mock_snapshot_service
=
mocker
.
patch
(
'swh.web.browse.views.utils.snapshot_context.service'
)
mock_origin_service
=
mocker
.
patch
(
'swh.web.browse.views.origin.service'
)
mock_utils_service
=
mocker
.
patch
(
'swh.web.browse.utils.service'
)
mock_get_origin_visit_snapshot
=
mocker
.
patch
(
'swh.web.browse.utils.get_origin_visit_snapshot'
)
mock_get_origin_visits
=
mocker
.
patch
(
'swh.web.common.origin_visits.get_origin_visits'
)
mock_request_content
=
mocker
.
patch
(
'swh.web.browse.views.utils.snapshot_context.request_content'
)
mock_origin_service
.
lookup_origin
.
side_effect
=
NotFoundExc
(
'origin not found'
)
url
=
reverse
(
'browse-origin-visits'
,
url_args
=
{
'origin_url'
:
'bar'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert_contains
(
resp
,
'origin not found'
,
status_code
=
404
)
mock_origin_service
.
lookup_origin
.
side_effect
=
None
mock_origin_service
.
lookup_origin
.
return_value
=
{
'type'
:
'foo'
,
'url'
:
'bar'
,
'id'
:
457
}
mock_get_origin_visits
.
return_value
=
[]
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
'bar'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert_contains
(
resp
,
"No visit"
,
status_code
=
404
)
mock_get_origin_visits
.
return_value
=
[{
'visit'
:
1
}]
mock_get_origin_visit_snapshot
.
side_effect
=
NotFoundExc
(
'visit not found'
)
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
'bar'
},
query_params
=
{
'visit_id'
:
2
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert
re
.
search
(
'Visit.*not found'
,
resp
.
content
.
decode
(
'utf-8'
))
mock_get_origin_visits
.
return_value
=
[{
'date'
:
'2015-09-26T09:30:52.373449+00:00'
,
'metadata'
:
{},
'origin'
:
457
,
'snapshot'
:
'bdaf9ac436488a8c6cda927a0f44e172934d3f65'
,
'status'
:
'full'
,
'visit'
:
1
}]
mock_get_origin_visit_snapshot
.
side_effect
=
None
mock_get_origin_visit_snapshot
.
return_value
=
(
[{
'directory'
:
'ae59ceecf46367e8e4ad800e231fc76adc3afffb'
,
'name'
:
'HEAD'
,
'revision'
:
'7bc08e1aa0b08cb23e18715a32aa38517ad34672'
,
'date'
:
'04 May 2017, 13:27 UTC'
,
'message'
:
''
}],
[]
)
mock_utils_service
.
lookup_snapshot_size
.
return_value
=
{
'revision'
:
1
,
'release'
:
0
}
mock_lookup_directory
=
mock_utils_service
.
lookup_directory
mock_lookup_directory
.
side_effect
=
NotFoundExc
(
'Directory not found'
)
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
'bar'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert_contains
(
resp
,
'Directory not found'
,
status_code
=
404
)
mock_origin_service
.
lookup_origin
.
side_effect
=
None
mock_origin_service
.
lookup_origin
.
return_value
=
{
'type'
:
'foo'
,
'url'
:
'bar'
,
'id'
:
457
}
mock_get_origin_visits
.
return_value
=
[]
url
=
reverse
(
'browse-origin-content'
,
url_args
=
{
'origin_url'
:
'bar'
,
'path'
:
'foo'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert_contains
(
resp
,
"No visit"
,
status_code
=
404
)
mock_get_origin_visits
.
return_value
=
[{
'visit'
:
1
}]
mock_get_origin_visit_snapshot
.
side_effect
=
NotFoundExc
(
'visit not found'
)
url
=
reverse
(
'browse-origin-content'
,
url_args
=
{
'origin_url'
:
'bar'
,
'path'
:
'foo'
},
query_params
=
{
'visit_id'
:
2
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert
re
.
search
(
'Visit.*not found'
,
resp
.
content
.
decode
(
'utf-8'
))
mock_get_origin_visits
.
return_value
=
[{
'date'
:
'2015-09-26T09:30:52.373449+00:00'
,
'metadata'
:
{},
'origin'
:
457
,
'snapshot'
:
'bdaf9ac436488a8c6cda927a0f44e172934d3f65'
,
'status'
:
'full'
,
'visit'
:
1
}]
mock_get_origin_visit_snapshot
.
side_effect
=
None
mock_get_origin_visit_snapshot
.
return_value
=
([],
[])
url
=
reverse
(
'browse-origin-content'
,
url_args
=
{
'origin_url'
:
'bar'
,
'path'
:
'baz'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert
re
.
search
(
'Origin.*has an empty list of branches'
,
resp
.
content
.
decode
(
'utf-8'
))
mock_get_origin_visit_snapshot
.
return_value
=
(
[{
'directory'
:
'ae59ceecf46367e8e4ad800e231fc76adc3afffb'
,
'name'
:
'HEAD'
,
'revision'
:
'7bc08e1aa0b08cb23e18715a32aa38517ad34672'
,
'date'
:
'04 May 2017, 13:27 UTC'
,
'message'
:
''
}],
[]
)
mock_snapshot_service
.
lookup_directory_with_path
.
return_value
=
{
'target'
:
'5ecd9f37b7a2d2e9980d201acd6286116f2ba1f1'
}
mock_request_content
.
side_effect
=
NotFoundExc
(
'Content not found'
)
url
=
reverse
(
'browse-origin-content'
,
url_args
=
{
'origin_url'
:
'bar'
,
'path'
:
'baz'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert_contains
(
resp
,
'Content not found'
,
status_code
=
404
)
mock_get_snapshot_context
=
mocker
.
patch
(
'swh.web.browse.views.utils.snapshot_context.get_snapshot_context'
)
mock_get_snapshot_context
.
side_effect
=
NotFoundExc
(
'Snapshot not found'
)
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
'bar'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
404
assert_template_used
(
'error.html'
)
assert_contains
(
resp
,
'Snapshot not found'
,
status_code
=
404
)
def
test_origin_empty_snapshot
(
client
,
mocker
):
mock_utils_service
=
mocker
.
patch
(
'swh.web.browse.utils.service'
)
mock_get_origin_visit_snapshot
=
mocker
.
patch
(
'swh.web.browse.utils.get_origin_visit_snapshot'
)
mock_get_origin_visits
=
mocker
.
patch
(
'swh.web.common.origin_visits.get_origin_visits'
)
mock_get_origin_visits
.
return_value
=
[{
'date'
:
'2015-09-26T09:30:52.373449+00:00'
,
'metadata'
:
{},
'origin'
:
457
,
'snapshot'
:
'bdaf9ac436488a8c6cda927a0f44e172934d3f65'
,
'status'
:
'full'
,
'type'
:
'git'
,
'visit'
:
1
}]
mock_get_origin_visit_snapshot
.
return_value
=
([],
[])
mock_utils_service
.
lookup_snapshot_size
.
return_value
=
{
'revision'
:
0
,
'release'
:
0
}
mock_utils_service
.
lookup_origin
.
return_value
=
{
'id'
:
457
,
'url'
:
'https://github.com/foo/bar'
}
url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
'bar'
})
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'content.html'
)
assert
re
.
search
(
'snapshot.*is empty'
,
resp
.
content
.
decode
(
'utf-8'
))
def
_origin_content_view_test_helper
(
client
,
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_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
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'content.html'
)
assert_contains
(
resp
,
'<code class="
%s
">'
%
content
[
'hljs_language'
])
assert_contains
(
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-
%d
T%H:%M:%S'
)
root_dir_url
=
reverse
(
'browse-origin-directory'
,
url_args
=
url_args
,
query_params
=
query_params
)
assert_contains
(
resp
,
'<li class="swh-path">'
,
count
=
len
(
path_info
)
+
1
)
assert_contains
(
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
)
assert_contains
(
resp
,
'<a href="
%s
">
%s
</a>'
%
(
dir_url
,
p
[
'name'
]))
assert_contains
(
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
})
assert_contains
(
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
)
assert_contains
(
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
)
assert_contains
(
resp
,
'<a href="
%s
">Releases (
%s
)</a>'
%
(
origin_releases_url
,
len
(
origin_releases
)))
assert_contains
(
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
)
assert_contains
(
resp
,
'<a href="
%s
">'
%
root_dir_branch_url
)
assert_contains
(
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
)
assert_contains
(
resp
,
'<a href="
%s
">'
%
root_dir_release_url
)
url
=
reverse
(
'browse-origin-content'
,
url_args
=
url_args
,
query_params
=
query_params
)
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'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
})
assert_contains
(
resp
,
swh_cnt_id
)
assert_contains
(
resp
,
swh_cnt_id_url
)
assert_contains
(
resp
,
'swh-take-new-snapshot'
)
def
_origin_directory_view_test_helper
(
client
,
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
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'directory.html'
)
assert
resp
.
status_code
==
200
assert_template_used
(
'directory.html'
)
assert_contains
(
resp
,
'<td class="swh-directory">'
,
count
=
len
(
dirs
))
assert_contains
(
resp
,
'<td class="swh-content">'
,
count
=
len
(
files
))
if
timestamp
:
url_args
[
'timestamp'
]
=
format_utc_iso_date
(
parse_timestamp
(
timestamp
)
.
isoformat
(),
'%Y-%m-
%d
T%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
)
assert_contains
(
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
)
assert_contains
(
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
assert_contains
(
resp
,
'<li class="swh-path">'
,
count
=
nb_bc_paths
)
assert_contains
(
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
)
assert_contains
(
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
:
assert_contains
(
resp
,
'<a href="
%s
">Releases (
%s
)</a>'
%
(
origin_releases_url
,
nb_releases
))
if
path
:
url_args
[
'path'
]
=
path
assert_contains
(
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
)
assert_contains
(
resp
,
'<a href="
%s
">'
%
root_dir_branch_url
)
assert_contains
(
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
)
assert_contains
(
resp
,
'<a href="
%s
">'
%
root_dir_release_url
)
assert_contains
(
resp
,
'vault-cook-directory'
)
assert_contains
(
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
})
assert_contains
(
resp
,
swh_dir_id
)
assert_contains
(
resp
,
swh_dir_id_url
)
assert_contains
(
resp
,
'swh-take-new-snapshot'
)
def
_origin_branches_test_helper
(
client
,
origin_info
,
origin_snapshot
):
url_args
=
{
'origin_url'
:
origin_info
[
'url'
]}
url
=
reverse
(
'browse-origin-branches'
,
url_args
=
url_args
)
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'branches.html'
)
origin_branches
=
origin_snapshot
[
0
]
origin_releases
=
origin_snapshot
[
1
]
origin_branches_url
=
reverse
(
'browse-origin-branches'
,
url_args
=
url_args
)
assert_contains
(
resp
,
'<a href="
%s
">Branches (
%s
)</a>'
%
(
origin_branches_url
,
len
(
origin_branches
)))
origin_releases_url
=
reverse
(
'browse-origin-releases'
,
url_args
=
url_args
)
nb_releases
=
len
(
origin_releases
)
if
nb_releases
>
0
:
assert_contains
(
resp
,
'<a href="
%s
">Releases (
%s
)</a>'
%
(
origin_releases_url
,
nb_releases
))
assert_contains
(
resp
,
'<tr class="swh-branch-entry'
,
count
=
len
(
origin_branches
))
for
branch
in
origin_branches
:
browse_branch_url
=
reverse
(
'browse-origin-directory'
,
url_args
=
{
'origin_url'
:
origin_info
[
'url'
]},
query_params
=
{
'branch'
:
branch
[
'name'
]})
assert_contains
(
resp
,
'<a href="
%s
">'
%
escape
(
browse_branch_url
))
browse_revision_url
=
reverse
(
'browse-revision'
,
url_args
=
{
'sha1_git'
:
branch
[
'revision'
]},
query_params
=
{
'origin'
:
origin_info
[
'url'
]})
assert_contains
(
resp
,
'<a href="
%s
">'
%
escape
(
browse_revision_url
))
def
_origin_releases_test_helper
(
client
,
origin_info
,
origin_snapshot
):
url_args
=
{
'origin_url'
:
origin_info
[
'url'
]}
url
=
reverse
(
'browse-origin-releases'
,
url_args
=
url_args
)
resp
=
client
.
get
(
url
)
assert
resp
.
status_code
==
200
assert_template_used
(
'releases.html'
)
origin_branches
=
origin_snapshot
[
0
]
origin_releases
=
origin_snapshot
[
1
]
origin_branches_url
=
reverse
(
'browse-origin-branches'
,
url_args
=
url_args
)
assert_contains
(
resp
,
'<a href="
%s
">Branches (
%s
)</a>'
%
(
origin_branches_url
,
len
(
origin_branches
)))
origin_releases_url
=
reverse
(
'browse-origin-releases'
,
url_args
=
url_args
)
nb_releases
=
len
(
origin_releases
)
if
nb_releases
>
0
:
assert_contains
(
resp
,
'<a href="
%s
">Releases (
%s
)</a>'
%
(
origin_releases_url
,
nb_releases
))
assert_contains
(
resp
,
'<tr class="swh-release-entry'
,
count
=
nb_releases
)
for
release
in
origin_releases
:
browse_release_url
=
reverse
(
'browse-release'
,
url_args
=
{
'sha1_git'
:
release
[
'id'
]},
query_params
=
{
'origin'
:
origin_info
[
'url'
]})
browse_revision_url
=
reverse
(
'browse-revision'
,
url_args
=
{
'sha1_git'
:
release
[
'target'
]},
query_params
=
{
'origin'
:
origin_info
[
'url'
]})
assert_contains
(
resp
,
'<a href="
%s
">'
%
escape
(
browse_release_url
))
assert_contains
(
resp
,
'<a href="
%s
">'
%
escape
(
browse_revision_url
))
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Thu, Jul 3, 11:42 AM (4 d, 17 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3439770
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment