Merge pull request 'improve ssh url deserialization tests' (#54) from improve-ssh-test into main
This commit is contained in:
		
						commit
						6f5d9ea4fa
					
				
					 3 changed files with 39 additions and 97 deletions
				
			
		
							
								
								
									
										39
									
								
								src/lib.rs
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								src/lib.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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());
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue