From df37f28ebd0da470870c13951910990f16b929e9 Mon Sep 17 00:00:00 2001 From: Brian Litwin Date: Mon, 8 Oct 2018 11:20:31 -0400 Subject: [PATCH] PeopleVC: Sort users with self first - moves sorting logic from fetch(page:) into type method - unit test --- Classes/People/PeopleViewController.swift | 19 +++++++-- FreetimeTests/SortUsers.swift | 52 +++++++++++++++++++++++ 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 FreetimeTests/SortUsers.swift diff --git a/Classes/People/PeopleViewController.swift b/Classes/People/PeopleViewController.swift index 381fcb022..f6b92f8b5 100644 --- a/Classes/People/PeopleViewController.swift +++ b/Classes/People/PeopleViewController.swift @@ -80,7 +80,17 @@ PeopleSectionControllerDelegate { return false } } - + + static func sortUsers(users: [V3User], currentUser: String?) -> [V3User] { + return users.sorted { + if $0.login == currentUser { + return true + } else { + return $0.login.caseInsensitiveCompare($1.login) == .orderedAscending + } + } + } + // MARK: Private API func updateSelectionCount() { @@ -106,9 +116,10 @@ PeopleSectionControllerDelegate { ) { [weak self] result in switch result { case .success(let response): - let sortedUsers = response.data.sorted { - $0.login.caseInsensitiveCompare($1.login) == .orderedAscending - } + let sortedUsers = PeopleViewController.sortUsers( + users: response.data, + currentUser: self?.client.userSession?.username + ) let users = sortedUsers.map { IssueAssigneeViewModel(login: $0.login, avatarURL: $0.avatarUrl) } if page != nil { self?.users += users diff --git a/FreetimeTests/SortUsers.swift b/FreetimeTests/SortUsers.swift new file mode 100644 index 000000000..029faa5a8 --- /dev/null +++ b/FreetimeTests/SortUsers.swift @@ -0,0 +1,52 @@ +// +// SortUsers.swift +// FreetimeTests +// +// Created by B_Litwin on 10/8/18. +// Copyright © 2018 Ryan Nystrom. All rights reserved. +// + +import XCTest +@testable import Freetime +@testable import GitHubAPI + +class SortUsers: XCTestCase { + + func makeUser(_ name: String) -> V3User { + return V3User( + avatarUrl: URL(string: "github.com")!, + id: 1, + login: name, + siteAdmin: false, + type: .user + ) + } + + func test_SortWithCurrentUserFirst() { + + var users = [ + "A_rnystrom", + "B_basthomas", + "C_Sherlouk", + ].map(makeUser) + + var sorted = PeopleViewController.sortUsers( + users: users, + currentUser: "B_basthomas" + ) + + // sorts the current user first and otherwise sorts alphabetically + XCTAssertEqual(sorted[0].login, "B_basthomas") + XCTAssertEqual(sorted[1].login, "A_rnystrom") + XCTAssertEqual(sorted[2].login, "C_Sherlouk") + + sorted = PeopleViewController.sortUsers( + users: users, + currentUser: nil + ) + + XCTAssertEqual(sorted[0].login, "A_rnystrom") + XCTAssertEqual(sorted[1].login, "B_basthomas") + XCTAssertEqual(sorted[2].login, "C_Sherlouk") + } +}