apollo-cache-inmemory
Version:
Core abstract of Caching layer for Apollo Client
627 lines • 43.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var graphql_tag_1 = tslib_1.__importStar(require("graphql-tag"));
var apollo_utilities_1 = require("apollo-utilities");
var lodash_1 = require("lodash");
var __1 = require("..");
graphql_tag_1.disableFragmentWarnings();
describe('Cache', function () {
function itWithInitialData(message, initialDataForCaches, callback) {
var cachesList = [
initialDataForCaches.map(function (data) {
return new __1.InMemoryCache({
addTypename: false,
}).restore(lodash_1.cloneDeep(data));
}),
initialDataForCaches.map(function (data) {
return new __1.InMemoryCache({
addTypename: false,
resultCaching: false,
}).restore(lodash_1.cloneDeep(data));
}),
initialDataForCaches.map(function (data) {
return new __1.InMemoryCache({
addTypename: false,
freezeResults: true,
}).restore(lodash_1.cloneDeep(data));
}),
];
cachesList.forEach(function (caches, i) {
it(message + (" (" + (i + 1) + "/" + cachesList.length + ")"), function () {
return callback.apply(void 0, caches);
});
});
}
function itWithCacheConfig(message, config, callback) {
var caches = [
new __1.InMemoryCache(tslib_1.__assign(tslib_1.__assign({ addTypename: false }, config), { resultCaching: true })),
new __1.InMemoryCache(tslib_1.__assign(tslib_1.__assign({ addTypename: false }, config), { resultCaching: false })),
new __1.InMemoryCache(tslib_1.__assign(tslib_1.__assign({ addTypename: false }, config), { freezeResults: true })),
];
caches.forEach(function (cache, i) {
it(message + (" (" + (i + 1) + "/" + caches.length + ")"), function () { return callback(cache); });
});
}
describe('readQuery', function () {
itWithInitialData('will read some data from the store', [
{
ROOT_QUERY: {
a: 1,
b: 2,
c: 3,
},
},
], function (proxy) {
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n {\n a\n }\n "], ["\n {\n a\n }\n "]))),
}))).toEqual({ a: 1 });
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n {\n b\n c\n }\n "], ["\n {\n b\n c\n }\n "]))),
}))).toEqual({ b: 2, c: 3 });
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject(["\n {\n a\n b\n c\n }\n "], ["\n {\n a\n b\n c\n }\n "]))),
}))).toEqual({ a: 1, b: 2, c: 3 });
});
itWithInitialData('will read some deeply nested data from the store', [
{
ROOT_QUERY: {
a: 1,
b: 2,
c: 3,
d: {
type: 'id',
id: 'foo',
generated: false,
},
},
foo: {
e: 4,
f: 5,
g: 6,
h: {
type: 'id',
id: 'bar',
generated: false,
},
},
bar: {
i: 7,
j: 8,
k: 9,
},
},
], function (proxy) {
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_4 || (templateObject_4 = tslib_1.__makeTemplateObject(["\n {\n a\n d {\n e\n }\n }\n "], ["\n {\n a\n d {\n e\n }\n }\n "]))),
}))).toEqual({ a: 1, d: { e: 4 } });
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_5 || (templateObject_5 = tslib_1.__makeTemplateObject(["\n {\n a\n d {\n e\n h {\n i\n }\n }\n }\n "], ["\n {\n a\n d {\n e\n h {\n i\n }\n }\n }\n "]))),
}))).toEqual({ a: 1, d: { e: 4, h: { i: 7 } } });
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_6 || (templateObject_6 = tslib_1.__makeTemplateObject(["\n {\n a\n b\n c\n d {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n }\n "], ["\n {\n a\n b\n c\n d {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n }\n "]))),
}))).toEqual({
a: 1,
b: 2,
c: 3,
d: { e: 4, f: 5, g: 6, h: { i: 7, j: 8, k: 9 } },
});
});
itWithInitialData('will read some data from the store with variables', [
{
ROOT_QUERY: {
'field({"literal":true,"value":42})': 1,
'field({"literal":false,"value":42})': 2,
},
},
], function (proxy) {
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_7 || (templateObject_7 = tslib_1.__makeTemplateObject(["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "], ["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: 42,
},
}))).toEqual({ a: 1, b: 2 });
});
itWithInitialData('will read some data from the store with null variables', [
{
ROOT_QUERY: {
'field({"literal":false,"value":null})': 1,
},
},
], function (proxy) {
expect(apollo_utilities_1.stripSymbols(proxy.readQuery({
query: graphql_tag_1.default(templateObject_8 || (templateObject_8 = tslib_1.__makeTemplateObject(["\n query($literal: Boolean, $value: Int) {\n a: field(literal: $literal, value: $value)\n }\n "], ["\n query($literal: Boolean, $value: Int) {\n a: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: null,
},
}))).toEqual({ a: 1 });
});
itWithInitialData('should not mutate arguments passed in', [
{
ROOT_QUERY: {
'field({"literal":true,"value":42})': 1,
'field({"literal":false,"value":42})': 2,
},
},
], function (proxy) {
var options = {
query: graphql_tag_1.default(templateObject_9 || (templateObject_9 = tslib_1.__makeTemplateObject(["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "], ["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: 42,
},
};
var preQueryCopy = lodash_1.cloneDeep(options);
expect(apollo_utilities_1.stripSymbols(proxy.readQuery(options))).toEqual({ a: 1, b: 2 });
expect(preQueryCopy).toEqual(options);
});
});
describe('readFragment', function () {
itWithInitialData('will throw an error when there is no fragment', [
{},
], function (proxy) {
expect(function () {
proxy.readFragment({
id: 'x',
fragment: graphql_tag_1.default(templateObject_10 || (templateObject_10 = tslib_1.__makeTemplateObject(["\n query {\n a\n b\n c\n }\n "], ["\n query {\n a\n b\n c\n }\n "]))),
});
}).toThrowError('Found a query operation. No operations are allowed when using a fragment as a query. Only fragments are allowed.');
expect(function () {
proxy.readFragment({
id: 'x',
fragment: graphql_tag_1.default(templateObject_11 || (templateObject_11 = tslib_1.__makeTemplateObject(["\n schema {\n query: Query\n }\n "], ["\n schema {\n query: Query\n }\n "]))),
});
}).toThrowError('Found 0 fragments. `fragmentName` must be provided when there is not exactly 1 fragment.');
});
itWithInitialData('will throw an error when there is more than one fragment but no fragment name', [{}], function (proxy) {
expect(function () {
proxy.readFragment({
id: 'x',
fragment: graphql_tag_1.default(templateObject_12 || (templateObject_12 = tslib_1.__makeTemplateObject(["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n "], ["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n "]))),
});
}).toThrowError('Found 2 fragments. `fragmentName` must be provided when there is not exactly 1 fragment.');
expect(function () {
proxy.readFragment({
id: 'x',
fragment: graphql_tag_1.default(templateObject_13 || (templateObject_13 = tslib_1.__makeTemplateObject(["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n\n fragment c on C {\n c\n }\n "], ["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n\n fragment c on C {\n c\n }\n "]))),
});
}).toThrowError('Found 3 fragments. `fragmentName` must be provided when there is not exactly 1 fragment.');
});
itWithInitialData('will read some deeply nested data from the store at any id', [
{
ROOT_QUERY: {
__typename: 'Type1',
a: 1,
b: 2,
c: 3,
d: {
type: 'id',
id: 'foo',
generated: false,
},
},
foo: {
__typename: 'Foo',
e: 4,
f: 5,
g: 6,
h: {
type: 'id',
id: 'bar',
generated: false,
},
},
bar: {
__typename: 'Bar',
i: 7,
j: 8,
k: 9,
},
},
], function (proxy) {
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_14 || (templateObject_14 = tslib_1.__makeTemplateObject(["\n fragment fragmentFoo on Foo {\n e\n h {\n i\n }\n }\n "], ["\n fragment fragmentFoo on Foo {\n e\n h {\n i\n }\n }\n "]))),
}))).toEqual({ e: 4, h: { i: 7 } });
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_15 || (templateObject_15 = tslib_1.__makeTemplateObject(["\n fragment fragmentFoo on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n "], ["\n fragment fragmentFoo on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n "]))),
}))).toEqual({ e: 4, f: 5, g: 6, h: { i: 7, j: 8, k: 9 } });
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'bar',
fragment: graphql_tag_1.default(templateObject_16 || (templateObject_16 = tslib_1.__makeTemplateObject(["\n fragment fragmentBar on Bar {\n i\n }\n "], ["\n fragment fragmentBar on Bar {\n i\n }\n "]))),
}))).toEqual({ i: 7 });
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'bar',
fragment: graphql_tag_1.default(templateObject_17 || (templateObject_17 = tslib_1.__makeTemplateObject(["\n fragment fragmentBar on Bar {\n i\n j\n k\n }\n "], ["\n fragment fragmentBar on Bar {\n i\n j\n k\n }\n "]))),
}))).toEqual({ i: 7, j: 8, k: 9 });
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_18 || (templateObject_18 = tslib_1.__makeTemplateObject(["\n fragment fragmentFoo on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment fragmentBar on Bar {\n i\n j\n k\n }\n "], ["\n fragment fragmentFoo on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment fragmentBar on Bar {\n i\n j\n k\n }\n "]))),
fragmentName: 'fragmentFoo',
}))).toEqual({ e: 4, f: 5, g: 6, h: { i: 7, j: 8, k: 9 } });
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'bar',
fragment: graphql_tag_1.default(templateObject_19 || (templateObject_19 = tslib_1.__makeTemplateObject(["\n fragment fragmentFoo on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment fragmentBar on Bar {\n i\n j\n k\n }\n "], ["\n fragment fragmentFoo on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment fragmentBar on Bar {\n i\n j\n k\n }\n "]))),
fragmentName: 'fragmentBar',
}))).toEqual({ i: 7, j: 8, k: 9 });
});
itWithInitialData('will read some data from the store with variables', [
{
foo: {
__typename: 'Foo',
'field({"literal":true,"value":42})': 1,
'field({"literal":false,"value":42})': 2,
},
},
], function (proxy) {
expect(apollo_utilities_1.stripSymbols(proxy.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_20 || (templateObject_20 = tslib_1.__makeTemplateObject(["\n fragment foo on Foo {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "], ["\n fragment foo on Foo {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: 42,
},
}))).toEqual({ a: 1, b: 2 });
});
itWithInitialData('will return null when an id that can’t be found is provided', [
{},
{
bar: { __typename: 'Bar', a: 1, b: 2, c: 3 },
},
{
foo: { __typename: 'Foo', a: 1, b: 2, c: 3 },
},
], function (client1, client2, client3) {
expect(apollo_utilities_1.stripSymbols(client1.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_21 || (templateObject_21 = tslib_1.__makeTemplateObject(["\n fragment fooFragment on Foo {\n a\n b\n c\n }\n "], ["\n fragment fooFragment on Foo {\n a\n b\n c\n }\n "]))),
}))).toEqual(null);
expect(apollo_utilities_1.stripSymbols(client2.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_22 || (templateObject_22 = tslib_1.__makeTemplateObject(["\n fragment fooFragment on Foo {\n a\n b\n c\n }\n "], ["\n fragment fooFragment on Foo {\n a\n b\n c\n }\n "]))),
}))).toEqual(null);
expect(apollo_utilities_1.stripSymbols(client3.readFragment({
id: 'foo',
fragment: graphql_tag_1.default(templateObject_23 || (templateObject_23 = tslib_1.__makeTemplateObject(["\n fragment fooFragment on Foo {\n a\n b\n c\n }\n "], ["\n fragment fooFragment on Foo {\n a\n b\n c\n }\n "]))),
}))).toEqual({ a: 1, b: 2, c: 3 });
});
});
describe('writeQuery', function () {
itWithInitialData('will write some data to the store', [{}], function (proxy) {
proxy.writeQuery({
data: { a: 1 },
query: graphql_tag_1.default(templateObject_24 || (templateObject_24 = tslib_1.__makeTemplateObject(["\n {\n a\n }\n "], ["\n {\n a\n }\n "]))),
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
a: 1,
},
});
proxy.writeQuery({
data: { b: 2, c: 3 },
query: graphql_tag_1.default(templateObject_25 || (templateObject_25 = tslib_1.__makeTemplateObject(["\n {\n b\n c\n }\n "], ["\n {\n b\n c\n }\n "]))),
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
a: 1,
b: 2,
c: 3,
},
});
proxy.writeQuery({
data: { a: 4, b: 5, c: 6 },
query: graphql_tag_1.default(templateObject_26 || (templateObject_26 = tslib_1.__makeTemplateObject(["\n {\n a\n b\n c\n }\n "], ["\n {\n a\n b\n c\n }\n "]))),
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
a: 4,
b: 5,
c: 6,
},
});
});
itWithInitialData('will write some deeply nested data to the store', [{}], function (proxy) {
proxy.writeQuery({
data: { a: 1, d: { e: 4 } },
query: graphql_tag_1.default(templateObject_27 || (templateObject_27 = tslib_1.__makeTemplateObject(["\n {\n a\n d {\n e\n }\n }\n "], ["\n {\n a\n d {\n e\n }\n }\n "]))),
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
a: 1,
d: {
type: 'id',
id: '$ROOT_QUERY.d',
generated: true,
},
},
'$ROOT_QUERY.d': {
e: 4,
},
});
proxy.writeQuery({
data: { a: 1, d: { h: { i: 7 } } },
query: graphql_tag_1.default(templateObject_28 || (templateObject_28 = tslib_1.__makeTemplateObject(["\n {\n a\n d {\n h {\n i\n }\n }\n }\n "], ["\n {\n a\n d {\n h {\n i\n }\n }\n }\n "]))),
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
a: 1,
d: {
type: 'id',
id: '$ROOT_QUERY.d',
generated: true,
},
},
'$ROOT_QUERY.d': {
e: 4,
h: {
type: 'id',
id: '$ROOT_QUERY.d.h',
generated: true,
},
},
'$ROOT_QUERY.d.h': {
i: 7,
},
});
proxy.writeQuery({
data: {
a: 1,
b: 2,
c: 3,
d: { e: 4, f: 5, g: 6, h: { i: 7, j: 8, k: 9 } },
},
query: graphql_tag_1.default(templateObject_29 || (templateObject_29 = tslib_1.__makeTemplateObject(["\n {\n a\n b\n c\n d {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n }\n "], ["\n {\n a\n b\n c\n d {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n }\n "]))),
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
a: 1,
b: 2,
c: 3,
d: {
type: 'id',
id: '$ROOT_QUERY.d',
generated: true,
},
},
'$ROOT_QUERY.d': {
e: 4,
f: 5,
g: 6,
h: {
type: 'id',
id: '$ROOT_QUERY.d.h',
generated: true,
},
},
'$ROOT_QUERY.d.h': {
i: 7,
j: 8,
k: 9,
},
});
});
itWithInitialData('will write some data to the store with variables', [{}], function (proxy) {
proxy.writeQuery({
data: {
a: 1,
b: 2,
},
query: graphql_tag_1.default(templateObject_30 || (templateObject_30 = tslib_1.__makeTemplateObject(["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "], ["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: 42,
},
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
'field({"literal":true,"value":42})': 1,
'field({"literal":false,"value":42})': 2,
},
});
});
itWithInitialData('will write some data to the store with variables where some are null', [{}], function (proxy) {
proxy.writeQuery({
data: {
a: 1,
b: 2,
},
query: graphql_tag_1.default(templateObject_31 || (templateObject_31 = tslib_1.__makeTemplateObject(["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "], ["\n query($literal: Boolean, $value: Int) {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: null,
},
});
expect(proxy.extract()).toEqual({
ROOT_QUERY: {
'field({"literal":true,"value":42})': 1,
'field({"literal":false,"value":null})': 2,
},
});
});
});
describe('writeFragment', function () {
itWithInitialData('will throw an error when there is no fragment', [{}], function (proxy) {
expect(function () {
proxy.writeFragment({
data: {},
id: 'x',
fragment: graphql_tag_1.default(templateObject_32 || (templateObject_32 = tslib_1.__makeTemplateObject(["\n query {\n a\n b\n c\n }\n "], ["\n query {\n a\n b\n c\n }\n "]))),
});
}).toThrowError('Found a query operation. No operations are allowed when using a fragment as a query. Only fragments are allowed.');
expect(function () {
proxy.writeFragment({
data: {},
id: 'x',
fragment: graphql_tag_1.default(templateObject_33 || (templateObject_33 = tslib_1.__makeTemplateObject(["\n schema {\n query: Query\n }\n "], ["\n schema {\n query: Query\n }\n "]))),
});
}).toThrowError('Found 0 fragments. `fragmentName` must be provided when there is not exactly 1 fragment.');
});
itWithInitialData('will throw an error when there is more than one fragment but no fragment name', [{}], function (proxy) {
expect(function () {
proxy.writeFragment({
data: {},
id: 'x',
fragment: graphql_tag_1.default(templateObject_34 || (templateObject_34 = tslib_1.__makeTemplateObject(["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n "], ["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n "]))),
});
}).toThrowError('Found 2 fragments. `fragmentName` must be provided when there is not exactly 1 fragment.');
expect(function () {
proxy.writeFragment({
data: {},
id: 'x',
fragment: graphql_tag_1.default(templateObject_35 || (templateObject_35 = tslib_1.__makeTemplateObject(["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n\n fragment c on C {\n c\n }\n "], ["\n fragment a on A {\n a\n }\n\n fragment b on B {\n b\n }\n\n fragment c on C {\n c\n }\n "]))),
});
}).toThrowError('Found 3 fragments. `fragmentName` must be provided when there is not exactly 1 fragment.');
});
itWithCacheConfig('will write some deeply nested data into the store at any id', {
dataIdFromObject: function (o) { return o.id; },
addTypename: false,
}, function (proxy) {
proxy.writeFragment({
data: { __typename: 'Foo', e: 4, h: { id: 'bar', i: 7 } },
id: 'foo',
fragment: graphql_tag_1.default(templateObject_36 || (templateObject_36 = tslib_1.__makeTemplateObject(["\n fragment fragmentFoo on Foo {\n e\n h {\n i\n }\n }\n "], ["\n fragment fragmentFoo on Foo {\n e\n h {\n i\n }\n }\n "]))),
});
expect(proxy.extract()).toMatchSnapshot();
proxy.writeFragment({
data: { __typename: 'Foo', f: 5, g: 6, h: { id: 'bar', j: 8, k: 9 } },
id: 'foo',
fragment: graphql_tag_1.default(templateObject_37 || (templateObject_37 = tslib_1.__makeTemplateObject(["\n fragment fragmentFoo on Foo {\n f\n g\n h {\n j\n k\n }\n }\n "], ["\n fragment fragmentFoo on Foo {\n f\n g\n h {\n j\n k\n }\n }\n "]))),
});
expect(proxy.extract()).toMatchSnapshot();
proxy.writeFragment({
data: { i: 10, __typename: 'Bar' },
id: 'bar',
fragment: graphql_tag_1.default(templateObject_38 || (templateObject_38 = tslib_1.__makeTemplateObject(["\n fragment fragmentBar on Bar {\n i\n }\n "], ["\n fragment fragmentBar on Bar {\n i\n }\n "]))),
});
expect(proxy.extract()).toMatchSnapshot();
proxy.writeFragment({
data: { j: 11, k: 12, __typename: 'Bar' },
id: 'bar',
fragment: graphql_tag_1.default(templateObject_39 || (templateObject_39 = tslib_1.__makeTemplateObject(["\n fragment fragmentBar on Bar {\n j\n k\n }\n "], ["\n fragment fragmentBar on Bar {\n j\n k\n }\n "]))),
});
expect(proxy.extract()).toMatchSnapshot();
proxy.writeFragment({
data: {
__typename: 'Foo',
e: 4,
f: 5,
g: 6,
h: { __typename: 'Bar', id: 'bar', i: 7, j: 8, k: 9 },
},
id: 'foo',
fragment: graphql_tag_1.default(templateObject_40 || (templateObject_40 = tslib_1.__makeTemplateObject(["\n fragment fooFragment on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment barFragment on Bar {\n i\n j\n k\n }\n "], ["\n fragment fooFragment on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment barFragment on Bar {\n i\n j\n k\n }\n "]))),
fragmentName: 'fooFragment',
});
expect(proxy.extract()).toMatchSnapshot();
proxy.writeFragment({
data: { __typename: 'Bar', i: 10, j: 11, k: 12 },
id: 'bar',
fragment: graphql_tag_1.default(templateObject_41 || (templateObject_41 = tslib_1.__makeTemplateObject(["\n fragment fooFragment on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment barFragment on Bar {\n i\n j\n k\n }\n "], ["\n fragment fooFragment on Foo {\n e\n f\n g\n h {\n i\n j\n k\n }\n }\n\n fragment barFragment on Bar {\n i\n j\n k\n }\n "]))),
fragmentName: 'barFragment',
});
expect(proxy.extract()).toMatchSnapshot();
});
itWithCacheConfig('writes data that can be read back', {
addTypename: true,
}, function (proxy) {
var readWriteFragment = graphql_tag_1.default(templateObject_42 || (templateObject_42 = tslib_1.__makeTemplateObject(["\n fragment aFragment on query {\n getSomething {\n id\n }\n }\n "], ["\n fragment aFragment on query {\n getSomething {\n id\n }\n }\n "])));
var data = {
__typename: 'query',
getSomething: { id: '123', __typename: 'Something' },
};
proxy.writeFragment({
data: data,
id: 'query',
fragment: readWriteFragment,
});
var result = proxy.readFragment({
fragment: readWriteFragment,
id: 'query',
});
expect(apollo_utilities_1.stripSymbols(result)).toEqual(data);
});
itWithCacheConfig('will write some data to the store with variables', {
addTypename: true,
}, function (proxy) {
proxy.writeFragment({
data: {
a: 1,
b: 2,
__typename: 'Foo',
},
id: 'foo',
fragment: graphql_tag_1.default(templateObject_43 || (templateObject_43 = tslib_1.__makeTemplateObject(["\n fragment foo on Foo {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "], ["\n fragment foo on Foo {\n a: field(literal: true, value: 42)\n b: field(literal: $literal, value: $value)\n }\n "]))),
variables: {
literal: false,
value: 42,
},
});
expect(proxy.extract()).toEqual({
foo: {
__typename: 'Foo',
'field({"literal":true,"value":42})': 1,
'field({"literal":false,"value":42})': 2,
},
});
});
});
describe('performTransaction', function () {
itWithInitialData('will not broadcast mid-transaction', [{}], function (cache) {
var numBroadcasts = 0;
var query = graphql_tag_1.default(templateObject_44 || (templateObject_44 = tslib_1.__makeTemplateObject(["\n {\n a\n }\n "], ["\n {\n a\n }\n "])));
cache.watch({
query: query,
optimistic: false,
callback: function () {
numBroadcasts++;
},
});
expect(numBroadcasts).toEqual(0);
cache.performTransaction(function (proxy) {
proxy.writeQuery({
data: { a: 1 },
query: query,
});
expect(numBroadcasts).toEqual(0);
proxy.writeQuery({
data: { a: 4, b: 5, c: 6 },
query: graphql_tag_1.default(templateObject_45 || (templateObject_45 = tslib_1.__makeTemplateObject(["\n {\n a\n b\n c\n }\n "], ["\n {\n a\n b\n c\n }\n "]))),
});
expect(numBroadcasts).toEqual(0);
});
expect(numBroadcasts).toEqual(1);
});
});
describe('performOptimisticTransaction', function () {
itWithInitialData('will only broadcast once', [{}], function (cache) {
var numBroadcasts = 0;
var query = graphql_tag_1.default(templateObject_46 || (templateObject_46 = tslib_1.__makeTemplateObject(["\n {\n a\n }\n "], ["\n {\n a\n }\n "])));
cache.watch({
query: query,
optimistic: true,
callback: function () {
numBroadcasts++;
},
});
expect(numBroadcasts).toEqual(0);
cache.recordOptimisticTransaction(function (proxy) {
proxy.writeQuery({
data: { a: 1 },
query: query,
});
expect(numBroadcasts).toEqual(0);
proxy.writeQuery({
data: { a: 4, b: 5, c: 6 },
query: graphql_tag_1.default(templateObject_47 || (templateObject_47 = tslib_1.__makeTemplateObject(["\n {\n a\n b\n c\n }\n "], ["\n {\n a\n b\n c\n }\n "]))),
});
expect(numBroadcasts).toEqual(0);
}, 1);
expect(numBroadcasts).toEqual(1);
});
});
});
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21, templateObject_22, templateObject_23, templateObject_24, templateObject_25, templateObject_26, templateObject_27, templateObject_28, templateObject_29, templateObject_30, templateObject_31, templateObject_32, templateObject_33, templateObject_34, templateObject_35, templateObject_36, templateObject_37, templateObject_38, templateObject_39, templateObject_40, templateObject_41, templateObject_42, templateObject_43, templateObject_44, templateObject_45, templateObject_46, templateObject_47;
//# sourceMappingURL=cache.js.map