Skip to content

Commit

Permalink
make the relay environment not responsible for determining whether it…
Browse files Browse the repository at this point in the history
… is a server environment

Reviewed By: jstejada

Differential Revision: D19844688

fbshipit-source-id: 8a70c7e690f87ff7b577cf2e1ec86fdf66e2def9
  • Loading branch information
rbalicki2 authored and facebook-github-bot committed Apr 1, 2020
1 parent 3d218a7 commit d11e649
Show file tree
Hide file tree
Showing 22 changed files with 780 additions and 603 deletions.
26 changes: 0 additions & 26 deletions packages/relay-experimental/ExecutionEnvironment.js

This file was deleted.

3 changes: 1 addition & 2 deletions packages/relay-experimental/QueryResource.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

'use strict';

const ExecutionEnvironment = require('./ExecutionEnvironment');
const LRUCache = require('./LRUCache');

const invariant = require('invariant');
Expand Down Expand Up @@ -162,7 +161,7 @@ function createCacheEntry(
temporaryRetain(environment: IEnvironment): Disposable {
// NOTE: If we're executing in a server environment, there's no need
// to create temporary retains, since the component will never commit.
if (ExecutionEnvironment.isServer) {
if (environment.isServer()) {
return {dispose: () => {}};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@

'use strict';

jest.mock('../ExecutionEnvironment', () => ({
isServer: false,
}));

const EntryPointContainer = require('../EntryPointContainer.react');
const React = require('react');
const RelayEnvironmentProvider = require('../RelayEnvironmentProvider');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@

'use strict';

jest.mock('../ExecutionEnvironment', () => ({
isServer: false,
}));

const LazyLoadEntryPointContainer_DEPRECATED = require('../LazyLoadEntryPointContainer_DEPRECATED.react');
const React = require('react');
const RelayEnvironmentProvider = require('../RelayEnvironmentProvider');
Expand Down
86 changes: 83 additions & 3 deletions packages/relay-experimental/__tests__/QueryResource-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,6 @@ describe('QueryResource', () => {
};

beforeEach(() => {
jest.mock('../ExecutionEnvironment', () => ({
isServer: false,
}));
store = new Store(new RecordSource());
environment = createMockEnvironment({store});
QueryResource = getQueryResourceForEnvironment(environment);
Expand Down Expand Up @@ -2752,3 +2749,86 @@ describe('QueryResource', () => {
});
});
});

describe('QueryResource, with an environment meant for SSR', () => {
let environment;
let QueryResource;
let fetchPolicy;
let fetchObservable;
let gqlQuery;
let query;
let release;
let renderPolicy;
const variables = {
id: '4',
};

beforeEach(() => {
environment = createMockEnvironment({isServer: true});
QueryResource = getQueryResourceForEnvironment(environment);
gqlQuery = generateAndCompile(
`query UserQuery($id: ID!) {
node(id: $id) {
... on User {
id
}
}
}
`,
).UserQuery;
query = createOperationDescriptor(gqlQuery, variables);
environment.commitPayload(query, {
node: {
__typename: 'User',
id: '4',
},
});

fetchObservable = fetchQuery(environment, query, {
networkCacheConfig: {force: true},
});

release = jest.fn();
environment.retain.mockImplementation((...args) => {
return {
dispose: release,
};
});

renderPolicy = 'partial';
});

describe('prepare', () => {
it('does not attempt to temporarily retain the query in a server environment', () => {
expect(environment.check(query)).toEqual({
status: 'available',
fetchTime: null,
});

jest.useFakeTimers();
const result = QueryResource.prepare(
query,
fetchObservable,
fetchPolicy,
renderPolicy,
);
expect(result).toEqual({
cacheKey: expect.any(String),
fragmentNode: query.fragment.node,
fragmentRef: {
__id: ROOT_ID,
__fragments: {
UserQuery: variables,
},
__fragmentOwner: query.request,
},
operation: query,
});
expect(environment.execute).not.toHaveBeenCalled();
expect(environment.retain).not.toHaveBeenCalled();
jest.runAllTimers();
expect(release).not.toHaveBeenCalled();
expect(setTimeout).not.toHaveBeenCalled();
});
});
});
3 changes: 0 additions & 3 deletions packages/relay-experimental/__tests__/fetchQuery-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@ describe('fetchQuery', () => {
let retained = [];
beforeEach(() => {
retained = [];
jest.mock('../ExecutionEnvironment', () => ({
isServer: false,
}));
environment = createMockEnvironment();
environment.retain.mockImplementation(obj => {
const idx = retained.push(obj);
Expand Down
Loading

0 comments on commit d11e649

Please sign in to comment.