1 | import {EventEmitter} from 'eventemitter3';
|
2 | import * as Promise from 'bluebird';
|
3 | import * as retry from 'bluebird-retry';
|
4 | import {expect} from 'chai';
|
5 | import {WampServer, WampRouter, wampRealm, wampServerOverFs} from '../src/nodejs';
|
6 | import {FileSystem, WampClientFileSystem, MemoryFileSystem} from '../src/universal';
|
7 | import {noConnectionError} from '../src/wamp-client-fs';
|
8 | import {EventsMatcher} from '../test-kit/drivers/events-matcher';
|
9 | import {
|
10 | assertFileSystemContract,
|
11 | ignoredDir,
|
12 | ignoredFile,
|
13 | fileName,
|
14 | dirName,
|
15 | content
|
16 | } from './implementation-suite'
|
17 |
|
18 | describe(`the wamp client filesystem implementation`, () => {
|
19 |
|
20 | let wampServer: WampServer;
|
21 |
|
22 | function server(): Promise<WampServer> {
|
23 | return wampServerOverFs(new MemoryFileSystem(undefined, [ignoredDir, ignoredFile]), 3000);
|
24 | }
|
25 |
|
26 | function getFS(): Promise<WampClientFileSystem> {
|
27 | return Promise.resolve(new WampClientFileSystem(`ws://127.0.0.1:3000`, wampRealm));
|
28 | }
|
29 |
|
30 | function getInitedFS(): Promise<WampClientFileSystem> {
|
31 | return getFS().then(fs => fs.init());
|
32 | }
|
33 |
|
34 | const eventMatcherOptions: EventsMatcher.Options = {
|
35 | interval: 50,
|
36 | noExtraEventsGrace: 150,
|
37 | timeout: 1500
|
38 | };
|
39 |
|
40 | beforeEach(() => server().then(clientAndServer => wampServer = clientAndServer));
|
41 |
|
42 | afterEach(() => {
|
43 | return new Promise(resolve => {
|
44 | wampServer.router.close();
|
45 | const errMsg = `WAMP connection hasn't been closed after the previous test`;
|
46 | return retry(
|
47 | () => (wampServer.connection as any).isConnected ? Promise.reject(errMsg) : Promise.resolve(),
|
48 | {interval: 100, max_tries: 10}
|
49 | ).then(() => resolve())
|
50 | });
|
51 | });
|
52 |
|
53 | assertFileSystemContract(getInitedFS, eventMatcherOptions);
|
54 |
|
55 | describe(`when not inited`, () => {
|
56 | it(`fails on each CRUD method`, () => {
|
57 | return Promise.all([
|
58 | expect(getFS().then(fs => fs.saveFile(fileName, content))).to.eventually.be.rejectedWith(noConnectionError),
|
59 | expect(getFS().then(fs => fs.deleteFile(fileName))).to.eventually.be.rejectedWith(noConnectionError),
|
60 | expect(getFS().then(fs => fs.deleteDirectory(dirName))).to.eventually.be.rejectedWith(noConnectionError),
|
61 | expect(getFS().then(fs => fs.ensureDirectory(dirName))).to.eventually.be.rejectedWith(noConnectionError),
|
62 | expect(getFS().then(fs => fs.loadTextFile(fileName))).to.eventually.be.rejectedWith(noConnectionError),
|
63 | expect(getFS().then(fs => fs.loadDirectoryTree())).to.eventually.be.rejectedWith(noConnectionError)
|
64 | ]);
|
65 |
|
66 | });
|
67 | });
|
68 | });
|