use crate::objects::user::User;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Repo {
pub name: String,
pub private: bool,
}
impl Repo {
pub fn new(name: String, private: bool) -> Repo {
Repo { name, private }
}
pub fn public(name: String) -> Repo {
Repo {
name,
private: false,
}
}
pub fn create_for(self, owner: &mut User) {
owner.repos.push(self)
}
}
#[cfg(test)]
mod tests {
use crate::objects::fakehub::FakeHub;
use crate::objects::repo::Repo;
use anyhow::Result;
use hamcrest::{equal_to, is, HamcrestMatcher};
#[test]
fn creates_repo() -> Result<()> {
let fakehub = FakeHub::default();
let github = fakehub.main();
let mut jeff = github.user("jeff").expect("Failed to get user").clone();
let foo = String::from("foo");
Repo::new(foo.clone(), false).create_for(&mut jeff);
assert_that!(jeff.repos.len(), is(equal_to(1)));
let repos = jeff.repos;
let repo = repos.first().expect("Failed to get repo");
assert_that!(repo.clone().name, is(equal_to(foo)));
Ok(())
}
}