mirror of https://github.com/artifacthub/hub.git
Update packages tsdoc when transferring repository (#1652)
Closes #1648 Signed-off-by: Sergio Castaño Arteaga <tegioz@icloud.com>
This commit is contained in:
parent
ea3b23570b
commit
f5e3d2b3de
|
|
@ -64,5 +64,32 @@ begin
|
||||||
user_id = null
|
user_id = null
|
||||||
where name = p_repository_name;
|
where name = p_repository_name;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
|
-- Regenerate repository's packages text search document using new
|
||||||
|
-- publisher information
|
||||||
|
with new_tsdoc as (
|
||||||
|
select
|
||||||
|
p.package_id,
|
||||||
|
generate_package_tsdoc(
|
||||||
|
p.name,
|
||||||
|
s.display_name,
|
||||||
|
s.description,
|
||||||
|
s.keywords,
|
||||||
|
array[r.name, r.display_name],
|
||||||
|
array[u.alias, o.name, o.display_name, s.provider]
|
||||||
|
) as tsdoc
|
||||||
|
from package p
|
||||||
|
join snapshot s using (package_id)
|
||||||
|
join repository r using (repository_id)
|
||||||
|
left join "user" u using (user_id)
|
||||||
|
left join organization o using (organization_id)
|
||||||
|
where s.version = p.latest_version
|
||||||
|
and r.name = p_repository_name
|
||||||
|
)
|
||||||
|
update package
|
||||||
|
set tsdoc = new_tsdoc.tsdoc
|
||||||
|
from new_tsdoc
|
||||||
|
where package.package_id = new_tsdoc.package_id;
|
||||||
|
|
||||||
end
|
end
|
||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
with new_tsdoc as (
|
||||||
|
select
|
||||||
|
p.package_id,
|
||||||
|
(
|
||||||
|
setweight(to_tsvector(p.name), 'A') ||
|
||||||
|
setweight(to_tsvector(coalesce(s.display_name, '')), 'A') ||
|
||||||
|
setweight(to_tsvector(coalesce(s.description, '')), 'B') ||
|
||||||
|
setweight(to_tsvector(array_to_string(coalesce(s.keywords, '{}'), ' ')), 'C') ||
|
||||||
|
setweight(to_tsvector(array_to_string(coalesce(array[r.name, r.display_name], '{}'), ' ')), 'B') ||
|
||||||
|
setweight(to_tsvector(array_to_string(coalesce(array[u.alias, o.name, o.display_name, s.provider], '{}'), ' ')), 'B')
|
||||||
|
) as tsdoc
|
||||||
|
from package p
|
||||||
|
join snapshot s using (package_id)
|
||||||
|
join repository r using (repository_id)
|
||||||
|
left join "user" u using (user_id)
|
||||||
|
left join organization o using (organization_id)
|
||||||
|
where s.version = p.latest_version
|
||||||
|
)
|
||||||
|
update package
|
||||||
|
set tsdoc = new_tsdoc.tsdoc
|
||||||
|
from new_tsdoc
|
||||||
|
where package.package_id = new_tsdoc.package_id;
|
||||||
|
|
||||||
|
---- create above / drop below ----
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
-- Start transaction and plan tests
|
-- Start transaction and plan tests
|
||||||
begin;
|
begin;
|
||||||
select plan(13);
|
select plan(16);
|
||||||
|
|
||||||
-- Declare some variables
|
-- Declare some variables
|
||||||
\set user1ID '00000000-0000-0000-0000-000000000001'
|
\set user1ID '00000000-0000-0000-0000-000000000001'
|
||||||
|
|
@ -10,6 +10,8 @@ select plan(13);
|
||||||
\set org3ID '00000000-0000-0000-0000-000000000003'
|
\set org3ID '00000000-0000-0000-0000-000000000003'
|
||||||
\set repo1ID '00000000-0000-0000-0000-000000000001'
|
\set repo1ID '00000000-0000-0000-0000-000000000001'
|
||||||
\set repo2ID '00000000-0000-0000-0000-000000000002'
|
\set repo2ID '00000000-0000-0000-0000-000000000002'
|
||||||
|
\set package1ID '00000000-0000-0000-0000-000000000001'
|
||||||
|
\set package2ID '00000000-0000-0000-0000-000000000002'
|
||||||
|
|
||||||
-- Seed some data
|
-- Seed some data
|
||||||
insert into "user" (user_id, alias, email)
|
insert into "user" (user_id, alias, email)
|
||||||
|
|
@ -28,6 +30,54 @@ insert into repository (repository_id, name, display_name, url, repository_kind_
|
||||||
values (:'repo1ID', 'repo1', 'Repo 1', 'https://repo1.com', 0, :'user1ID');
|
values (:'repo1ID', 'repo1', 'Repo 1', 'https://repo1.com', 0, :'user1ID');
|
||||||
insert into repository (repository_id, name, display_name, url, repository_kind_id, organization_id)
|
insert into repository (repository_id, name, display_name, url, repository_kind_id, organization_id)
|
||||||
values (:'repo2ID', 'repo2', 'Repo 2', 'https://repo2.com', 0, :'org1ID');
|
values (:'repo2ID', 'repo2', 'Repo 2', 'https://repo2.com', 0, :'org1ID');
|
||||||
|
insert into package (
|
||||||
|
package_id,
|
||||||
|
name,
|
||||||
|
latest_version,
|
||||||
|
repository_id
|
||||||
|
) values (
|
||||||
|
:'package1ID',
|
||||||
|
'package1',
|
||||||
|
'1.0.0',
|
||||||
|
:'repo1ID'
|
||||||
|
);
|
||||||
|
insert into snapshot (
|
||||||
|
package_id,
|
||||||
|
version,
|
||||||
|
app_version,
|
||||||
|
display_name,
|
||||||
|
description
|
||||||
|
) values (
|
||||||
|
:'package1ID',
|
||||||
|
'1.0.0',
|
||||||
|
'12.0.0',
|
||||||
|
'Package 1',
|
||||||
|
'description'
|
||||||
|
);
|
||||||
|
insert into package (
|
||||||
|
package_id,
|
||||||
|
name,
|
||||||
|
latest_version,
|
||||||
|
repository_id
|
||||||
|
) values (
|
||||||
|
:'package2ID',
|
||||||
|
'package2',
|
||||||
|
'1.0.0',
|
||||||
|
:'repo2ID'
|
||||||
|
);
|
||||||
|
insert into snapshot (
|
||||||
|
package_id,
|
||||||
|
version,
|
||||||
|
app_version,
|
||||||
|
display_name,
|
||||||
|
description
|
||||||
|
) values (
|
||||||
|
:'package2ID',
|
||||||
|
'1.0.0',
|
||||||
|
'12.0.0',
|
||||||
|
'Package 2',
|
||||||
|
'description'
|
||||||
|
);
|
||||||
|
|
||||||
-- Transfers NOT part of an ownership claim request
|
-- Transfers NOT part of an ownership claim request
|
||||||
|
|
||||||
|
|
@ -97,12 +147,30 @@ select results_eq(
|
||||||
);
|
);
|
||||||
select is(count(*), 0::bigint, 'No repository ownership claim events should have been registered')
|
select is(count(*), 0::bigint, 'No repository ownership claim events should have been registered')
|
||||||
from event where repository_id=:'repo2ID' and event_kind_id = 3;
|
from event where repository_id=:'repo2ID' and event_kind_id = 3;
|
||||||
|
select is(
|
||||||
|
tsdoc,
|
||||||
|
'2:3A 2:7B description:4B package:2A package2:1A repo:6B repo2:5B user1:8B'::tsvector,
|
||||||
|
'Package 2 tsdoc should have been updated (user1 is now the publisher)'
|
||||||
|
)
|
||||||
|
from package where package_id=:'package2ID';
|
||||||
|
select is(
|
||||||
|
tsdoc,
|
||||||
|
null,
|
||||||
|
'Package 1 tsdoc should not have been updated'
|
||||||
|
)
|
||||||
|
from package where package_id=:'package1ID';
|
||||||
select transfer_repository(
|
select transfer_repository(
|
||||||
'repo2',
|
'repo2',
|
||||||
'00000000-0000-0000-0000-000000000001',
|
'00000000-0000-0000-0000-000000000001',
|
||||||
'org1',
|
'org1',
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
select is(
|
||||||
|
tsdoc,
|
||||||
|
'1:10B 2:3A,7B description:4B org1:8B organization:9B package:2A package2:1A repo:6B repo2:5B'::tsvector,
|
||||||
|
'Package 2 tsdoc should have been updated again (org1 is now the publisher)'
|
||||||
|
)
|
||||||
|
from package where package_id=:'package2ID';
|
||||||
|
|
||||||
-- Transfer org owned repository to other org
|
-- Transfer org owned repository to other org
|
||||||
select transfer_repository(
|
select transfer_repository(
|
||||||
|
|
@ -155,7 +223,6 @@ select transfer_repository(
|
||||||
null,
|
null,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
select * from event;
|
|
||||||
select results_eq(
|
select results_eq(
|
||||||
$$
|
$$
|
||||||
select user_id, organization_id
|
select user_id, organization_id
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue