💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Find a file
Evan Morikawa d1c587a01c fix(spec): add support for async specs and disable misbehaving ones
More spec fixes

replace process.nextTick with setTimeout(fn, 0) for specs

Also added an unspy in the afterEach

Temporarily disable specs

fix(spec): start fixing specs

Summary:
This is the WIP fix to our spec runner.

Several tests have been completely commented out that will require
substantially more work to fix. These have been added to our sprint
backlog.

Other tests have been fixed to update to new APIs or to deal with genuine
bugs that were introduced without our knowing!

The most common non-trivial change relates to observing the `NylasAPI` and
`NylasAPIRequest`. We used to observe the arguments to `makeRequest`.
Unfortunately `NylasAPIRequest.run` is argumentless. Instead you can do:
`NylasAPIRequest.prototype.run.mostRecentCall.object.options` to get the
`options` passed into the object. the `.object` property grabs the context
of the spy when it was last called.

Fixing these tests uncovered several concerning issues with our test
runner. I spent a while tracking down why our participant-text-field-spec
was failling every so often. I chose that spec because it was the first
spec to likely fail, thereby requiring looking at the least number of
preceding files. I tried binary searching, turning on and off, several
files beforehand only to realize that the failure rate was not determined
by a particular preceding test, but rather the existing and quantity of
preceding tests, AND the number of console.log statements I had. There is
some processor-dependent race condition going on that needs further
investigation.

I also discovered an issue with the file-download-spec. We were getting
errors about it accessing a file, which was very suspicious given the code
stubs out all fs access. This was caused due to a spec that called an
async function outside ot a `waitsForPromise` block or a `waitsFor` block.
The test completed, the spies were cleaned up, but the downstream async
chain was still running. By the time the async chain finished the runner
was already working on the next spec and the spies had been restored
(causing the real fs access to run).

Juan had an idea to kill the specs once one fails to prevent cascading
failures. I'll implement this in the next diff update

Test Plan: npm test

Reviewers: juan, halla, jackie

Differential Revision: https://phab.nylas.com/D3501

Disable other specs

Disable more broken specs

All specs turned off till passing state

Use async-safe versions of spec functions

Add async test spec

Remove unused package code

Remove canary spec
2016-12-15 13:02:00 -05:00
apm build(*): electron-compile, electron-packager instead of custom tooling 2016-11-09 13:52:10 -08:00
build Move old edgehill src/pro into K2/packages/nylas-private 2016-12-12 10:10:26 -05:00
docs fix(docs): We no longer support Node 4 for building 2016-11-09 15:51:05 -08:00
dot-nylas bump(version): 0.4.200 2016-10-26 19:48:22 -04:00
flow-typed rm(grim): We’re not using Grim for deprecations 2016-10-25 11:36:20 -07:00
internal_packages fix(spec): add support for async specs and disable misbehaving ones 2016-12-15 13:02:00 -05:00
keymaps es6(composer): Composer extensions => ES2016 2016-10-27 17:28:36 -07:00
menus fix(menus): Add missing Window menu to win32 and linux 2016-06-10 11:55:59 -07:00
script fix(script/bootstrap) Properly remove already present lns + error handling 2016-12-13 17:57:54 -08:00
spec fix(spec): add support for async specs and disable misbehaving ones 2016-12-15 13:02:00 -05:00
spec_integration refactor(auth): DRY auth 2016-12-06 16:03:42 -08:00
src fix(spec): add support for async specs and disable misbehaving ones 2016-12-15 13:02:00 -05:00
static fix(rendering): Don't set a class on plaintext pre wrapping 2016-12-14 20:35:51 -08:00
.eslintrc Update grunt tasks to lint and transpile es6 code using babel 2015-11-06 17:40:42 -08:00
.gitignore Create a new sync window. 2016-11-22 15:29:27 -08:00
.gitmodules Move old edgehill src/pro into K2/packages/nylas-private 2016-12-12 10:10:26 -05:00
.travis.yml Move old edgehill src/pro into K2/packages/nylas-private 2016-12-12 10:10:26 -05:00
.watchmanconfig add watchman config file for fast fuzzy find 2016-12-05 16:23:48 -08:00
appveyor.yml Move old edgehill src/pro into K2/packages/nylas-private 2016-12-12 10:10:26 -05:00
CHANGELOG.md bump(version): 0.4.204 2016-11-07 14:16:50 -08:00
CONFIGURATION.md feat(self-hosting): Add onboarding flow for self-hosted sync engine 2016-07-21 14:25:30 -07:00
CONTRIBUTING.md fix(docs): We no longer support Node 4 for building 2016-11-09 15:51:05 -08:00
ISSUE_TEMPLATE.md Update ISSUE_TEMPLATE.md 2016-07-23 13:03:38 -07:00
keymap.json fix(config): Move all reads / writes to the main process 2016-05-16 16:38:46 -05:00
LICENSE.md fix(license): Swap ref to GPLv3 with the whole thing so GitHub picks it up 2016-10-15 10:48:44 -07:00
package.json bump(version): 0.4.400 2016-11-21 16:38:29 -08:00
README.md fix(readme): Remove readme to prevent overwriting on script/bootstrap 2016-11-09 15:16:44 -08:00

N1 Logo

N1 Screenshot

N1 is an open-source mail client built on the modern web with Electron, React, and Flux. It is designed to be extensible, so it's easy to create new experiences and workflows around email. N1 is built on the Nylas Sync Engine, which is also open-source free software.

Build Status Slack Invite Button ![GitHub issues On Deck](https://badge.waffle.io/nylas/N1.png?label=on deck&title=On Deck)

Want help build the future of email? Nylas is hiring!

Download N1

You can download compiled versions of N1 for Windows, Mac OS X, and Linux (.deb) from https://nylas.com/N1. You can also build and run N1 on Fedora. On Arch Linux, you can install n1 or n1-git from the aur.

Build A Plugin

Plugins lie at the heart of N1 and give it its powerful features. Building your own plugins allows you to integrate the app with other tools, experiment with new workflows, and more. Follow the Getting Started guide to write your first plugin in five minutes. To create your own theme, go to our Theme Starter guide.

If you would like to run the N1 source and contribute, check out our contributing guide.

Themes

The Nylas N1 user interface is styled using CSS, which means it's easy to modify and extend. N1 comes stock with a few beautiful themes, and there are many more which have been built by community developers

Bundled Themes

Community Themes

To install community themes:

  1. Download and unzip the repo
  2. In Nylas N1, select Developer > Install a Package Manually...
  3. Navigate to where you downloaded the theme and select the root folder. The theme is copied into the ~/.nylas folder for your convinence
  4. Select Change Theme... from the top level menu, and you'll see the newly installed theme. That's it!

Want to dive in more? Try creating your own theme!

Plugin List

We're working on building a plugin index that makes it super easy to add them to N1. For now, check out the list below! (Feel free to submit a PR if you build a plugin and want it featured here.)

Bundled Plugins

Great starting points for creating your own plugins!

Community Plugins

Note these are not tested or officially supported by Nylas, but we still think they are really cool! If you find bugs with them, please open GitHub issues on their individual project pages, not the N1 repo page. Thanks!

When you install packages, they're moved to ~/.nylas/packages, and N1 runs apm install on the command line to fetch dependencies listed in the package's package.json

Configuration

You can configure N1 in a few ways—for instance, pointing it to your self-hosted instance of the sync engine or changing the interface zoom level. Learn more about how.

Feature Requests / Plugin Ideas

Have an idea for a package or a feature you'd love to see in N1? Check out our public Trello board to contribute your thoughts and vote on existing ideas.