github-desktop/docs/process/testing.md
2021-01-25 14:27:13 -05:00

462 lines
32 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### Download Desktop
- [ ] [User can download latest (Mac & Windows) Desktop](https://desktop.github.com/)
- [ ] [Mac](https://central.github.com/deployments/desktop/desktop/latest/darwin)
- [ ] Homebrew package manager: `brew cask install github-desktop`
- [ ] [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32)
- [ ] Chocolatey package manager: `choco install github-desktop`
- [ ] 64-bit and up
- [ ] Data is retained if you download and open a fresh copy
- [ ] Release notes page is up-to-date in app and can be accessed from [here](https://desktop.github.com/release-notes/)
- [ ] [Help page](https://help.github.com/desktop/) is accessible
- [ ] 'Please update' notification shown in Classic apps
### Welcome Flow
- [ ] Create your free account (`/join?source=github-desktop`)
- [ ] User is not automatically logged into Desktop post account creation
- [ ] `Sign in to Github.com` link
- [ ] `Sign in` successful if valid username/email and password
- [ ] If 2FA activated, user sent auth code to enter (test SMS and authenticator app)
- [ ] User can reissue auth code with `Resend SMS` link
- [ ] Sign in successful with active 2FA code, user goes to Configure Git page
- [ ] User sees Repository landing page if sign-in successful
- [ ] Error message if code is wrong or inactive
- [ ] Error message if incorrect username/email or password
- [ ] Forgot link (`/password_reset`)
- [ ] `Cancel` returns to initial Welcome Flow page
- [ ] `Sign-in using your browser` opens default browser for confirmation
- [ ] Browser login, "authorize" GitHub Desktop, “accept” link
- [ ] If successful, Desktop shown in `/settings/applications` in user profile
- [ ] `Sign in to Enterprise` link (v2.8 and up)
- [ ] `Continue` successful if server address is valid, else error message
- [ ] `Sign in using your browser` opens default browser for confirmation
- [ ] Browser login, [insert custom security measure], Authorize GitHub Desktop, “accept” link
- [ ] User goes to Configure Git if successful
- [ ] `Cancel` returns to initial Welcome Flow
- [ ] User served generic message if not authorized to access Enterprise
- [ ] Skip "username+password" step
- [ ] Configure Git
- [ ] Name and email pulled from global `.gitconfig` file, if configured
- [ ] If recognized, your avatar is present in example commit; gravatars not recognized
- [ ] `Continue` allowed if fields populated or blank
- [ ] Valid login credentials from github.com or Enterprise carried through
- [ ] User sees Repository landing page if sign-in successful
- [ ] Usage Data
- [ ] Checked by default; user can uncheck. (Should not be checked by default if user on free plan only.)
- [ ] Clicking `Finish`, results in user being signed-in successfully
- [ ] `Cancel` returns to initial Configure Git page
### Onboarding & Tutorial
- [ ] Onboarding shown if user is new to Desktop and has no repositories in the application
- [ ] If user logged in during sign-up process with repository lists for GitHub.com and/or Enterprise
- [ ] Always show suggested steps: Clone repository, Add existing repository, Add new repository
- [ ] If logged into GitHub, show button for creating tutorial
- [ ] Adding a repository will automatically exit Onboarding
- [ ] User can revert to Onboarding if all repositories are removed
- [ ] Tutorial can only be started if there is no local or remote `desktop-tutorial` repository, else error surfaced
- [ ] Repository is created as first step, with green checkmarks for each completed step.
- [ ] User can click `Exit Tutorial` anytime to return to Onboarding page
### Repositories landing page; default no repositories
- [ ] Create New Repository (Mac: `⌘N`; Windows: `Ctrl+N`)
- [ ] Modal opens with name, path (choose option), readme (unchecked), git ignore, license. Name and path mandatory.
- [ ] If `Add this repository` warning message appears, clicking it adds to Repo list
- [ ] If repository name is over 100 characters, warning message is surfaced in modal
- [ ] If repository contains URL-hostile characters, show error message
- [ ] `Create Repository` button adds new repo, which is added to Repo list
- [ ] `Cancel` button does not save any changes made; modal closed
- [ ] User cannot create a new repo inside a locked local directory
- [ ] Clone a Repository (Mac: `⇧⌘O`; Windows: `Ctrl+Shift+O`)
- [ ] Enter valid URL or `username/repo/gist`, else error message
- [ ] If authentication error for Github.com, modal with username/password surfaced; `Cancel` or `Save and Retry` buttons
- [ ] If successful, repo is cloned
- [ ] Modal surfaces again if unsuccessful
- [ ] If authentication error for Enterprise, user redirected to Preferences
- [ ] Valid path can be entered or selected
- [ ] Local path is prepopulated; if not unique then error surfaced
- [ ] All repos from both GitHub.com and Enterprise are populated -- your repos are listed first, followed by org(s)
- [ ] User must be logged in to view list; else `Sign In` button present
- [ ] Results are filterable, and can be selected for cloning
- [ ] `Clone` creates repo at selected path
- [ ] Repo added to Repo list
- [ ] `Cancel` closes modal, no repo cloned
- [ ] Add a Local Repository (Mac: `⌘O`; Windows: `Ctrl+O`)
- [ ] Valid path can be entered or selected
- [ ] `Add repository` activated if repo path exists
- [ ] Repo added to Repo list
- [ ] If directory path not valid, 'Create a new repo' error message is present
- [ ] `Cancel` closes modal, no repo added
- [ ] Large repos (> 100MB) trigger Initialize Git LFS modal
- [ ] Link takes user to (`https://git-lfs.github.com/`)
- [ ] Local path to repo is displayed
- [ ] User can click `Cancel` or `Initialize Git LFS`
- [ ] Drag and drop repository
- [ ] User can drag existing local repository into Desktop
- [ ] Successful attempt adds repo to Repo list; else error message
### Publishing a repository
- [ ] Publish Repository modal present if repo is unpublished and user clicks `Publish repository` button
- [ ] GitHub tab is default; Enterprise tab is also present
- [ ] User must be signed-in to publish, else `Sign In` button present on tab
- [ ] Modal fields are Name, Description (optional), `Keep this code private` checkbox, Organization list (alpha order, tab-specific, if orgs exist), `Cancel` button, `Publish Repository` button
- [ ] Clicking `Publish Repository` button pushes repo to GitHub.com or Enterprise; `Cancel` button closes modal
- [ ] Repository is present on GitHub.com or Enterprise if published
- [ ] 'Visibility can't be private error' shown, if user's plan is not sufficient
- [ ] A `.gitattributes` file is added to the repository as part of the initial commit
- [ ] If repo is forked and upstream remote does not match, then modal is surfaced with Ignore/Update button
### Application
- [ ] Minimize, Maximize, Close buttons work in top nav
- [ ] If user zooms in and quits app, settings should be retained when reopened
- [ ] Double-clicking local desktop icon opens the application (Mac OS only)
- [ ] Double clicking top nav bar toggles full-screen / last used screen-size (Mac OS only); Exit by (Mac: `^⌘f11`; Windows: `Alt`)
- [ ] Clicking Desktop icon in dock/taskbar opens the application
- [ ] Changing desktop icon name while app is open results in package error; if app is closed then name change successful
### GitHub Desktop menu top-level
- [ ] About GitHub Desktop
- [ ] Current version shown
- [ ] Links to release notes (modal), terms (modal), licenses (modal)
- [ ] Update banner shows `whats new` (modal) and `restart now`; App will restart with latest build
- [ ] Update modal shows enhancements / bug fixes in latest build with `Install button`; user can X the banner
- [ ] Clicking the build version number copies to clipboard
- [ ] Edge case: If build is "old", error message displays warning user to "... manually check for updates".
- [ ] Clicking `Check for updates` button produces "read-only volume" error message, with link for help
- [ ] Clicking `Check for updates` button timestamps last attempt; periodic autochecking in the background
- [ ] If update available, `Install Update` button will quit app and install update
- [ ] If update available, download banner is present in main window with `restart` and `whats new` links
- [ ] If checking for update or download latest update in progress, the `Check for updates` button is disabled
- [ ] Restarting the app automatically checks for updates
- [ ] `Close` button closes modal
- [ ] Preferences/Options (Mac: `⌘,` Windows: `Ctrl+,`)
- [ ] Accounts
- [ ] GitHub.com name, handle, avatar, `sign out` button, if user signed in
- [ ] Enterprise handle, avatar, `sign out` button, if user signed in
- [ ] User can sign out of either account
- [ ] User can be signed-in to both Enterprise and GitHub.com at same time
- [ ] Integrations
- [ ] External Editor options shown in dropdown; else show link to install the default editor
- [ ] Shell options shown in dropdown
- [ ] Git
- [ ] Username and email are displayed if `.gitconfig` configured for Welcome flow
- [ ] `Save` button saves any changes made
- [ ] `Cancel` button does not save any changes made; modal closed
- [ ] Appearance
- [ ] Light theme is default
- [ ] Dark theme is optional
- [ ] For Mac, users can opt to match system preference theme with checkbox
- [ ] Advanced
- [ ] Stashing options include "Ask me..", "Always bring my changes...", and "Always stash...". "Ask Me" is default.
- [ ] Confirmation dialogue for removing repositories is checked by default; user can toggle
- [ ] Verify positive `ConfirmDiscardChanges` value in Dev Tools > Application > Local storage > file://
- [ ] Confirmation dialogue for discarding files is checked by default; user can toggle
- [ ] Verify positive `ConfirmRepoRemoval` value in Dev Tools > Application > Local storage > file://
- [ ] Confirmation dialogue for force pushing files is checked by default; user can toggle
- [ ] Verify positive `confirmForcePush` value in Dev Tools > Application > Local storage > file://
- [ ] `Save` button saves any changes made
- [ ] `Cancel` button does not save any changes made; modal closed
- [ ] Shared usage data option; selection carried through from Welcome flow
- [ ] `anonymous usage data` link opens https://desktop.github.com/usage-data/
- [ ] Verify positive `stats-opt-out` value in Dev Tools > Application > Local storage > file://
- [ ] Install command line tool installs tool at `/usr/local/bin/github` (Mac only as Windows done automagically; Helper may require password, else error message)
- [ ] If already installed, user sees: "The command line tool has been installed at /usr/local/bin/github"
- [ ] Clicking `OK` closes modal
- [ ] Quit/Exit Desktop (Mac: `⌘Q`)
- [ ] Quitting/Exiting and reopening Desktop returns you to last visited repo
- [ ] Menu items are disabled if any modal is present; MacOS-default menu items not applicable
### File top-level menu
- [ ] New Repository... (Mac: `⌘N`; Windows: `Ctrl+N`)
- [ ] Add Local Repository... (Mac: `⌘O`; Windows: `Ctrl+O`)
- [ ] Clone Repository... (Mac: `⇧⌘O`; Windows: `Ctrl+Shift+O`)
- [ ] Options... (Windows only: `Ctrl+,`)
- [ ] Exit (Windows only; quits the app)
### Edit top-level menu
- [ ] Undo (Mac: `⌘Z`; Windows: `Ctrl+Z`)
- [ ] Redo (Mac: `⇧⌘Z`; Windows: `Ctrl+Y`)
- [ ] Cut (Mac: `⌘X`; Windows: `Ctrl+X`)
- [ ] Copy (Mac: `⌘C`; Windows: `Ctrl+C`)
- [ ] Paste (Mac: `⌘V`; Windows: `Ctrl+V`)
- [ ] Select all (Mac: `⌘A`; Windows: `Ctrl+A`)
### View top-level menu
- [ ] Show Changes (Mac: `⌘1`; Windows: `Ctrl+1`)
- [ ] Show History (Mac: `⌘2`; Windows: `Ctrl+2`)
- [ ] Show Repositories List (Mac: `⌘T`; Windows: `Ctrl+T`)
- [ ] Show Branches List (Mac: `⌘B`; Windows: `Ctrl+B`)
- [ ] Go to Summary (Mac: `⌘G`; Windows: `Ctrl+G`)
- [ ] Show/Hide Stashed Changes (Mac: `^H`; Windows: `Ctrl+H`)
- [ ] Enter Full Screen (Mac: `^⌘F`; Windows: `F11`)
- [ ] Reset Zoom (Mac: `⌘0`; Windows: `Ctrl+0`)
- [ ] Zoom In (Mac: `⌘=`; Windows: `Ctrl+=`)
- [ ] Zoom Out (Mac: `⌘-`; Windows: `Ctrl+-`)
- [ ] Toggle Developer Tools (Mac: `⌥⌘I`; Windows: `Ctrl+Shift+I`)
### Repository top-level menu. (Only enabled if one repo present)
- [ ] Push (Mac: `⌘P`; Windows: `Ctrl+P`)
- [ ] Commits from repository are pushed to github.com; error message shown if conflicts
- [ ] Pull (Mac: `⇧⌘P`; Windows: `Ctrl+Shirt+P`)
- [ ] Commits from repository are pulled from github.com; error message shown if conflicts
- [ ] Remove
- [ ] Repository is removed from Repository List; confirmation dialogue shown if Preferences option enabled
- [ ] View on GitHub (Mac: `⌥⌘G`; Windows: `Ctrl+Alt+G`)
- [ ] Repository on github.com is opened; must be logged in if private repository or Enterprise repository
- [ ] Open in [insert shell] (Mac: `^[tilde-sign]`; Windows: ); see Shell options in preferences
- [ ] Local repository is opened
- [ ] If git not installed, modal asks to Open with Git or Install Git
- [ ] Show in Finder/Explorer (Mac: `⇧⌘F`; Windows: `Ctrl+Shift+F`)
- [ ] Local repository is opened
- [ ] Open in [insert editor] (Mac: `⇧⌘A`; Windows: `Ctrl+Shift+A`); see External Editor option in preferences
- [ ] Secondary modal appears if no Editors set; option to download the default editor
- [ ] Repository settings...
- [ ] Remote path can be edited for existing repository; origin already set. Cannot be empty string, else error message.
- [ ] `Saved` button saves last entry
- [ ] `Cancel` button closes modal
- [ ] User can opt for `Setup custom remote` for a non-GitHub repository
- [ ] `Save & Publish` button saves last entry
- [ ] `Cancel` button closes modal
- [ ] Ignored Files
- [ ] `.gitignore` file contents are shown and can be edited
- [ ] `Saved` button saves last entry; changes create a new commit
- [ ] `Cancel` button closes modal
### Branch top-level menu
- [ ] New Branch... (Mac: `⇧⌘N`; Windows: `Ctrl+Shift+N`)
- [ ] Clicking `Create Branch` makes new branch based on the entered name, if not a duplicate
- [ ] Master branch is mentioned in the list; current branch shown first
- [ ] `Cancel` button closes modal
- [ ] Rename... (cannot be default branch)
- [ ] `Rename` button changes branch name if field updated
- [ ] Same branch on github.com is not renamed
- [ ] `Cancel` button closes modal
- [ ] Protected branches cannot be renamed
- [ ] Delete... (cannot be default branch)
- [ ] Option to delete branch on the remote; default is unchecked
- [ ] `Delete` button deletes branch (and remote too if option checked)
- [ ] `Cancel` button closes modal
- [ ] Protected branches cannot be deleted
- [ ] Update from [default branch] (cannot be default; Mac: `⇧⌘U`; Windows: `Ctrl+Shift+U`)
- [ ] Merge success banner is shown temporarily; user can `X` to remove
- [ ] Compare to Branch (Mac: `⇧⌘B`; Windows: `Ctrl+Shift+B`)
- [ ] Takes you to the history tab with the input selected so you can directly choose a branch
- [ ] Merge into Current Branch... (Mac: `⇧⌘M`; Windows: `Ctrl+Shift+M`)
- [ ] Use can filter to find existing branches
- [ ] User can select branch, other than current one
- [ ] Merge hint shows status and branches to be merged
- [ ] `Merge` button only activated if something to merge (includes awaiting conflicts)
- [ ] If merged, success banner is shown temporarily; user can `X` to remove
- [ ] If conflicts, conflict modal shows quantity of files, ability to open in [editor], open in command line, `Abort` button, while `Commit merge` button is deactivated until files are resolved; Changes tab shows all files
- [ ] If conflict resolved, files marked green, and user can click `Commit merge` button
- [ ] If merged, success banner is shown temporarily; user can `X` to remove
- [ ] Binary files must be resolved in command line before committing merge
- [ ] Aborting partially resolved commit surfaces "Are you sure?" dialogue; `Cancel` or `Abort merge` buttons
- [ ] Rebase Current Branch...
- [ ] User can filter to find existing branches
- [ ] User can select branch, other than current one
- [ ] Rebase hint shows status and branches to be merged
- [ ] `Start rebase` button only activated if something to rebase
- [ ] If rebase, success banner is shown temporarily; user can `X` to remove
- [ ] If conflicts, conflict modal shows quantity of files, ability to open in [editor], open in command line, `Abort` button, while `Continue rebase` button is deactivated until files are resolved
- [ ] If conflicts resolved, files marked green, and user can click `Continue rebase` button
- [ ] If rebased, success banner is shown temporarily; user can `X` to remove
- [ ] Aborting partially resolved rebase surfaces "Are you sure?" dialogue; `Cancel` or `Abort merge` buttons
- [ ] Compare on GitHub (Mac: `⇧⌘C`; Windows: `Ctrl+Shift+C`) (if repository already published on `github.com`)
- [ ] Create Pull Request (Mac: `⌘R`; Windows: `Ctrl+R`) opens Pull Request on `github.com`
- [ ] If branch unpublished, dialogue asks to publish the branch
- [ ] `Push Local Changes` modal surfaces with option to `Create Without Pushing` and `Push Commits`;(trigger: `Create Pull Request` after commit on branch before pushing)
### Window top-level menu (Mac only)
- [ ] Minimize, Zoom (maximize app size), Close, Bring All to Front, GitHub Desktop
### Help top-level menu
- [ ] `Report Issue...` opens issue filing in Desktop repository on `github.com`
- [ ] `Contact GitHub Support...` opens `https://github.com/contact` page with user and build prepopulated
- [ ] `Show User Guides` opens Desktop help page on `github.com`
- [ ] `Show Keyboard Shortcuts` opens `https://help.github.com/en/desktop/getting-started-with-github-desktop/keyboard-shortcuts-in-github-desktop`
- [ ] `Show Logs in Finder/Explorer` opens Finder/Explorer logs in local directory
- [ ] Mac: `ls ~/Library/Application\ Support/GitHub\ Desktop/Logs/*.log`
- [ ] Windows: `%LOCALAPPDATA%\\Desktop\\*.desktop.production.log`
- [ ] About GitHub Desktop (Windows only)
### Next Steps
- [ ] Up to four suggested steps are shown at any given time, contingent on the state of the repository and/or branch
- [ ] First step is not always shown, and it can be `View Stash`, `Pull Origin`, `Pull Origin`, `Create Pull Request`, `Publish Repository`
- [ ] Other steps are `Open in [editor]` with Preferences/Options link, `Show in [Finder/Explorer]` and `View in GitHub`
### Repositories list
- [ ] Current repository is always shown in top slot with respective icon; if repository exists
- [ ] Opening list shows all repositories, categorized by owner in alpha format with a working filter
- [ ] If more than six repositories, a Recent group will appear at the top of the list; limit 3 repositories
- [ ] `ESC` clears the filter
- [ ] Search filter match results in bold characters
- [ ] A repository with uncommitted files shows a `•` next to name
- [ ] All repositories (private, enterprise, local, public, forked, other) have proper icon and found in the proper category (GitHub.com/Enterprise/Other)
- [ ] Hover shows username/repository, url, and/or local path in tooltip
- [ ] User must have paid account for private repositories
- [ ] Repository icon is updated if admin changes status (public vs private)
- [ ] `Add` button dropdown shows three options: Clone Repository, Add Existing Repository, Create New Repository
- [ ] Repositories cloned from non-github servers should always be in the Other group, and have the 'computer' icon.
- [ ] Selecting a repository updates Changes/History/Diff areas
- [ ] If no Changes, Diff area shows `Open this repository` link to Finder/Explorer on local
- [ ] `Right-click` reveals `Open in [Shell]`, `Open in Finder/Explorer`, `Open in [Editor]`, and `Remove` options
- [ ] Repositories which have been removed locally (and trash emptied) have 'cannot find repository' warning
- [ ] Relaunching the app when it displays a missing repository preserves the repository's name and last seen path
- [ ] Remove a repository which can not be found (deleted locally & trash emptied)
- [ ] Repositories which are cloning display a progress bar
### Changes tab
- [ ] Changes tab shows `•` icon if files are waiting to be committed
- [ ] Number of changed files is always present; it can be 0
- [ ] Any changed files appear in the list, with respective +/•/- sign; with arrow keys enabled
- [ ] Merge-conflicted files shown with hazard icon; cannot be committed until fixed
- [ ] User can check none, or check one or more files to commit; list is scrollable
- [ ] User can select one or more lines to commit; diff is scrollable
- [ ] Right-clicking opens context menu
- [ ] User can discard the file (or all files); pending confirmation dialogue
- [ ] `Do not show this message again`overrides the preference setting if true
- [ ] User can ignore single/all files, show in Finder/Explorer, reveal in external editor, or open in default program
- [ ] A specific file can only be ignored once
- [ ] All ignored files found in Repository Settings > Ignored Files tab
- [ ] User can open in finder, preferred editor, or OS default program
- [ ] Panes can be resized horizontally, and contents resize to take the full width
- [ ] Quitting Desktop and relaunching remembers pane sizes
- [ ] Uncommitted files are optionally stashed if user attempts to switch branches; depends on Preferences.
- [ ] Modal asks user to stash on current branch or bring changes to new branch; `Cancel` or `Switch Branch` buttons
- [ ] If stashed then changes shown under Stashed Changes section below Changes tab when returning to the original branch
- [ ] Stashed changes section show all stashed files and diffs; user can discard or restore to Changes
- [ ] If moved to new branch, all previously changed files will exist under Changes tab on the new branch
### History tab
- [ ] History tab shows commits on your current branch by default
- [ ] All commits listed in chronological order, with avatar, date and name; list is scrollable with arrow keys enabled
- [ ] Right clicking any commit shows options: Revert This Commit, Copy SHA, View on GitHub
- [ ] Hover shows file name in tooltip
- [ ] Placing cursor in search field show all branches with number of commits behind/ahead; list is alpha and categorized
- [ ] Filtering for branch name that doesn't exist shows "Sorry, I can't find that branch"
- [ ] User can search to a target branch to filter commits; `esc` key to exit; autocomplete and text prediction intact
- [ ] User can toggle between behind/ahead, with counts shown; Behind tab is shown by default
- [ ] If more than 0 commits behind, a list of commits are shown in reverse chronological order
- [ ] If more than 0 commits ahead, a list of commits are shown in reverse chronological order
- [ ] User can merge in any commits into current branch for the "behind" tab; (button disabled if 0 commits behind)
- [ ] Merge hint shown below `Merge into X` button with status, numbers of commits, and branch names
- [ ] After successful merge, tab counts update and merge button is disabled
- [ ] Merge conflict results in dialog shown directing user to commit view
- [ ] Merge prompt shown above filter if comparing two branches and commits are behind default branch
- [ ] `View commits` shows commits in Changes list, `Merge... opens Merge in Current Branch modal`, or `X` to close
### Diffs section (History tab)
- [ ] All commits have avatar, selectable SHA, # of files changed, commit message, commit description (optional)
- [ ] Long commit descriptions can be toggled with expand/collapse icon
- [ ] Reverting commit repopulates commit area
- [ ] Error message if no changes to commit
- [ ] All files within a commit listed, with respective +/•/-/-> sign; list is scrollable
- [ ] Diffs are viewable; list is scrollable with arrow keys enabled
- [ ] Green is for additions, red for deletions
- [ ] Different file types are rendered properly
- [ ] Single pic file with the `->` sign has multiple view options: 2-up (default); Swipe; Onion Skin; and Difference
- [ ] Panes can be resized horizontally, and contents resize to take the full width
- [ ] Diffs cannot be over 3MB
- [ ] Diffs cannot be longer than 500,000 characters
### Commit section (Changes tab)
- [ ] Commit created if user clicks `Commit to [branch]` button with commit message and at least one checked file
- [ ] `Fetch origin` changes to `Push` with number of commits badge
- [ ] Avatar of user is shown
- [ ] User can 'at-mention' those associated with the respective repository; either summary or description field is ok (published repositories only)
- [ ] User can 'pound-mention' an issue in the either summary or description field; issue number should populate (published repositories only)
- [ ] Summary field is required
- [ ] Description field is optional
- [ ] User can undo last commit
- [ ] `Push` with number of commits badge is decremented or reverts to `Fetch origin`
- [ ] `Undo` button disabled if user is pushing commit
- [ ] User can publish a new repository with no commits (aka unborn repository/branch)
- [ ] User can make new branch the default branch, by making the initial commit on the new branch
- [ ] User can select individual file(s) -- and individual lines of a file(s) -- to commit at a time
- [ ] Forked messaging shown if user cannot write to cloned repository and there are changes
- [ ] If user opts to fork the repository, a confirmation dialogue surfaced. Errors caught within the dialogue.
- [ ] Clicking confirm results in successful fork creation
- [ ] Protected branches messaging shown if branch is protected and there are changes
### Co-authoring (Changes tab)
- [ ] clicking co-author icon toggles co-author field; or right-click within commit area
- [ ] Hovering over the icon reveals add/remove 'action' text
- [ ] Right-click includes Mac/Windows context menus; option greyed out if repo not published to github.com
- [ ] User can tag other GitHub.com users only, or those within your Enterprise org
- [ ] Tag is tied to public API name/email; email is "no-reply" if user setting is enabled
- [ ] Mouseover tooltip reveals name and email of any entered tags
- [ ] Tagging those outside of GitHub turns tag red
- [ ] You cannot tag a user more than once via the autocomplete; manually you can
- [ ] Typing a GitHub name not part of the initial autocomplete will initiate a search
- [ ] Found names are tagged; all others are turned red
- [ ] Navigating away from the Changes tab will clear red tags
- [ ] Toggling the co-author icon clears the field
- [ ] All co-authors show up in History and diff view
- [ ] Commits with `Co-Authored-By: Name <username@github.com>`in the description field reveal avatar of user
- [ ] Hovering over an avatar reveals all tagged users
- [ ] Hovering over the "people" text reveals all names/emails of tagged users
- [ ] Undoing a commit re-enables the valid tags
- [ ] Reverting a commit does not re-enable any tags
### Branches list
- [ ] Current branch always shows if repository present
- [ ] Hover shows full branch name in tooltip
- [ ] Long branch names are truncated, with beginning/end of branch name shown
- [ ] Opening list shows all branches in categorized format with a working filter
- [ ] `New` button opens 'New Branch' modal
- [ ] If filters results are nil, then prefill branch name in modal if user clicks `Create New Branch`
- [ ] Active branch is highlighted and marked with a check
- [ ] `esc` clears the filter
- [ ] Search filter match results in bold characters
- [ ] Hover shows full branch name in tooltip
- [ ] `Choose a branch to merge into [current branch]` button is shown; (Mac: `⇧⌘M`; Windows: `Ctrl+Shift+M`)
- [ ] Default branch labeled and listed first, with timestamp
- [ ] Selecting a branch switches branches
- [ ] Creating a new branch shows `Publish branch` button
- [ ] Publishing successful if logged in only; else error message
- [ ] `Create Pull Request` menu option shows warning if branch not published yet
- [ ] Renamed branches updated on github.com and vice-versa if logged in; else error message
- [ ] Opens modal with ability to enter new name
- [ ] Deleted branches updated on github.com and vice-versa if logged in; else error message
- [ ] Deleting branch show warning message
### Fetching origin/Pull
- [ ] Code is constantly being fetched from github.com with timestamp
- [ ] Hover shows timestamp in tooltip
- [ ] If Pull Requests on github.com, they are reflected with down arrow and quantity
- [ ] Pull Requests and Commits can co-exist; error surfaces if merge commit
- [ ] User cannot Push/Pull without being signed-in; error message surfaced
- [ ] Push/Pull works with public/private/Enterprise repos
- [ ] Tooltip shows status upon hover, if progress to display
- [ ] When a branch is local-only make sure that the `Fetch` button changes to `Publish` and it publishes
### Publishing only
- [ ] Unpublished repository, unborn HEAD - `Publish button` enabled (user can publish repository)
- [ ] Unpublished repository, valid branch - `Publish button` enabled (user can publish repository and branch)
- [ ] Published repository, unborn HEAD - `Publish button` disabled (no branch to push)
- [ ] Published repository, branch without tracking - `Publish button` enabled (user can publish branch)
- [ ] Published repository, network action - `Publish button` disabled (don't interfere with existing action)
### Github.com
- [ ] If Desktop linked to .com (/settings/applications), the Desktop icon should show on File Revisions tab for all Pull Requests
- [ ] Clicking the "computer icon" opens from a Pull Request page opens the branch on Desktop
- [ ] `Open in Desktop` button under a repo's `Clone and Download` button should open repo in Desktop
- [ ] If private email is enabled (http://github.com/settings/emails), user is blocked from pushing to all associated repositories on Desktop?
- [ ] If user updates name in Settings, change should reflect in Preferences
### Pull Request list + Continuous Integration (CI) status
- [ ] Pull request list shown as tab on Branch list; quality shown in tab
- [ ] Only open Pull Requests are reflected; closed Pull Requests are not shown in the list
- [ ] Pull Request toolbar status is surfaced with yellow/green/red icon, or no icon if no status
- [ ] If no pull requests, then no badge shown, and Pull Request tab shows `0`
- [ ] User shown current branch in text area, and given option to create a new branch or create new pull request
- [ ] Pull request for the current branch selected by default, with pull-request-number badge in header
- [ ] Pull request list can be filtered; `esc` key clears filter; arrow keys can scroll list
- [ ] Results in chronological order, with name, id number, date, username, and CI status (if enabled)
- [ ] Status checks run frequently in background, especially if yellow
- [ ] If user hovers over CI status icons, tooltips show individual/group status details
- [ ] Pull Request status in the list can be updated independently of respective Pull Request being viewed (background job)
- [ ] Show link to upstream pull requests in pull request list of a fork if PR for current branch is in upstream repo
- [ ] Show link to create a pull request if there is no PR for current branch
### Security
- [ ] `Untrusted server` warning surfaced if GitHub cannot verify the identity of `api.github.com`; user can `Cancel` or `Continue`