static RemoteRepositoryModel CreateRemoteRepositoryModel(Repository repository) { var ownerAccount = new GitHub.Models.Account(repository.Owner); var parent = repository.Parent != null?CreateRemoteRepositoryModel(repository.Parent) : null; var model = new RemoteRepositoryModel(repository.Id, repository.Name, repository.CloneUrl, repository.Private, repository.Fork, ownerAccount, parent, repository.DefaultBranch); if (parent != null) { parent.DefaultBranch.DisplayName = parent.DefaultBranch.Id; } return(model); }
public void CopyFromDoesNotLoseAvatar() { var userImage = AvatarProvider.CreateBitmapImage("pack://application:,,,/GitHub.App;component/Images/default_user_avatar.png"); var orgImage = AvatarProvider.CreateBitmapImage("pack://application:,,,/GitHub.App;component/Images/default_org_avatar.png"); var initialBitmapImageSubject = new Subject<BitmapImage>(); var collectionEvent = new ManualResetEvent(false); var avatarPropertyEvent = new ManualResetEvent(false); //Creating an initial account with an observable that returns immediately const string login = "******"; const int initialOwnedPrivateRepositoryCount = 1; var initialAccount = new Account(login, true, false, initialOwnedPrivateRepositoryCount, 0, initialBitmapImageSubject); //Creating the test collection var col = new TrackingCollection<IAccount>(Observable.Empty<IAccount>(), OrderedComparer<IAccount>.OrderByDescending(x => x.Login).Compare); col.Subscribe(account => { collectionEvent.Set(); }, () => { }); //Adding that account to the TrackingCollection col.AddItem(initialAccount); //Waiting for the collection add the item collectionEvent.WaitOne(); collectionEvent.Reset(); //Checking some initial properties Assert.Equal(login, col[0].Login); Assert.Equal(initialOwnedPrivateRepositoryCount, col[0].OwnedPrivateRepos); //Demonstrating that the avatar is not yet present Assert.Null(col[0].Avatar); //Adding a listener to check for the changing of the Avatar property initialAccount.Changed.Subscribe(args => { if (args.PropertyName == "Avatar") { avatarPropertyEvent.Set(); } }); //Providing the first avatar initialBitmapImageSubject.OnNext(userImage); initialBitmapImageSubject.OnCompleted(); //Waiting for the avatar to be added avatarPropertyEvent.WaitOne(); avatarPropertyEvent.Reset(); //Demonstrating that the avatar is present Assert.NotNull(col[0].Avatar); Assert.True(BitmapSourcesAreEqual(col[0].Avatar, userImage)); Assert.False(BitmapSourcesAreEqual(col[0].Avatar, orgImage)); //Creating an account update const int updatedOwnedPrivateRepositoryCount = 2; var updatedBitmapImageSubject = new Subject<BitmapImage>(); var updatedAccount = new Account(login, true, false, updatedOwnedPrivateRepositoryCount, 0, updatedBitmapImageSubject); //Updating the account in the collection col.AddItem(updatedAccount); //Waiting for the collection to process the update collectionEvent.WaitOne(); collectionEvent.Reset(); //Providing the second avatar updatedBitmapImageSubject.OnNext(orgImage); updatedBitmapImageSubject.OnCompleted(); //Waiting for the delayed bitmap image observable avatarPropertyEvent.WaitOne(); avatarPropertyEvent.Reset(); //Login is the id, so that should be the same Assert.Equal(login, col[0].Login); //CopyFrom() should have updated this field Assert.Equal(updatedOwnedPrivateRepositoryCount, col[0].OwnedPrivateRepos); //CopyFrom() should not cause a race condition here Assert.NotNull(col[0].Avatar); Assert.True(BitmapSourcesAreEqual(col[0].Avatar, orgImage)); Assert.False(BitmapSourcesAreEqual(col[0].Avatar, userImage)); }