1
0
Fork 0

Merge pull request 'improve ssh url deserialization tests' (#54) from improve-ssh-test into main

This commit is contained in:
Cyborus 2024-05-14 15:38:21 +00:00
commit 6f5d9ea4fa
3 changed files with 39 additions and 97 deletions

View file

@ -290,6 +290,45 @@ fn parse_ssh_url(raw_url: &String) -> Result<Url, url::ParseError> {
})
}
#[test]
fn ssh_url_deserialization() {
#[derive(serde::Deserialize)]
struct SshUrl {
#[serde(deserialize_with = "deserialize_ssh_url")]
url: url::Url,
}
let full_url = r#"{ "url": "ssh://git@codeberg.org/Cyborus/forgejo-api" }"#;
let ssh_url = r#"{ "url": "git@codeberg.org:Cyborus/forgejo-api" }"#;
let full_url_de =
serde_json::from_str::<SshUrl>(full_url).expect("failed to deserialize full url");
let ssh_url_de =
serde_json::from_str::<SshUrl>(ssh_url).expect("failed to deserialize ssh url");
let expected = "ssh://git@codeberg.org/Cyborus/forgejo-api";
assert_eq!(full_url_de.url.as_str(), expected);
assert_eq!(ssh_url_de.url.as_str(), expected);
#[derive(serde::Deserialize)]
struct OptSshUrl {
#[serde(deserialize_with = "deserialize_optional_ssh_url")]
url: Option<url::Url>,
}
let null_url = r#"{ "url": null }"#;
let full_url_de = serde_json::from_str::<OptSshUrl>(full_url)
.expect("failed to deserialize optional full url");
let ssh_url_de =
serde_json::from_str::<OptSshUrl>(ssh_url).expect("failed to deserialize optional ssh url");
let null_url_de =
serde_json::from_str::<OptSshUrl>(null_url).expect("failed to deserialize null url");
let expected = Some("ssh://git@codeberg.org/Cyborus/forgejo-api");
assert_eq!(full_url_de.url.as_ref().map(|u| u.as_ref()), expected);
assert_eq!(ssh_url_de.url.as_ref().map(|u| u.as_ref()), expected);
assert!(null_url_de.url.is_none());
}
impl From<structs::DefaultMergeStyle> for structs::MergePullRequestOptionDo {
fn from(value: structs::DefaultMergeStyle) -> Self {
match value {

View file

@ -430,9 +430,3 @@ async fn admin() {
.await
.expect("failed to delete hook");
}
#[test]
fn ssh_url_deserialization() {
let data = include_str!("./repo_data.json");
assert!(serde_json::from_str::<Repository>(data).is_ok());
}

View file

@ -1,91 +0,0 @@
{
"id": 160106,
"owner": {
"id": 94809,
"login": "Cyborus",
"login_name": "",
"full_name": "",
"email": "cyborus@noreply.codeberg.org",
"avatar_url": "https://codeberg.org/avatars/53e78f627539c6a0b96854028529779133724a5df2d2c229e5d0eb48aaa3d1fa",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-30T00:54:15Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "https://cyborus.xyz",
"description": "I host my own Forgejo instance at https://code.cartoon-aa.xyz/",
"visibility": "public",
"followers_count": 4,
"following_count": 4,
"starred_repos_count": 8,
"username": "Cyborus"
},
"name": "forgejo-api",
"full_name": "Cyborus/forgejo-api",
"description": "Rust crate to interact with the Forgejo API",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 1481,
"language": "Rust",
"languages_url": "https://codeberg.org/api/v1/repos/Cyborus/forgejo-api/languages",
"html_url": "https://codeberg.org/Cyborus/forgejo-api",
"url": "https://codeberg.org/api/v1/repos/Cyborus/forgejo-api",
"link": "",
"ssh_url": "git@codeberg.org:Cyborus/forgejo-api.git",
"clone_url": "https://codeberg.org/Cyborus/forgejo-api.git",
"original_url": "",
"website": "",
"stars_count": 4,
"forks_count": 1,
"watchers_count": 2,
"open_issues_count": 2,
"open_pr_counter": 0,
"release_counter": 2,
"default_branch": "main",
"archived": false,
"created_at": "2023-11-09T17:42:18Z",
"updated_at": "2024-04-27T22:42:52Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": false,
"wiki_branch": "master",
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": false,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": true,
"default_merge_style": "merge",
"default_allow_maintainer_edit": true,
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null
}