Skip to content

Commit 5c38ee4

Browse files
committed
issue-171 single replace spec
1 parent 799dc20 commit 5c38ee4

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

src/component/processes/adapter/_base.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@ export const getBaseAdapterProcess = (process: AdapterProcess) =>
1515
static process: AdapterProcess = process;
1616

1717
static parseInput<T>(scroller: Scroller, options: T): IParseInput<T> {
18-
const inputData = validate(options, ADAPTER_METHODS[process]);
19-
const result: IParseInput<T> = { data: inputData };
18+
const result: IParseInput<T> = {
19+
data: validate(options, ADAPTER_METHODS[process])
20+
};
2021

21-
if (inputData.isValid) {
22-
result.params = Object.entries(inputData.params)
22+
if (result.data.isValid) {
23+
result.params = Object.entries(result.data.params)
2324
.reduce((acc, [key, { value }]) => ({
2425
...acc,
2526
[key]: value
2627
}), {} as T);
2728
} else {
28-
scroller.logger.log(() => inputData.showErrors());
29+
scroller.logger.log(() => result.data.showErrors());
2930
scroller.workflow.call({
3031
process,
3132
status: ProcessStatus.error,

src/component/workflow-transducer.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,6 @@ export const runStateMachine = ({
141141
case AdapterProcess.remove:
142142
run(Clip)();
143143
break;
144-
case AdapterProcess.clip:
145-
run(PreFetch)();
146-
break;
147144
default:
148145
run(PreFetch)();
149146
}

tests/adapter.replace.spec.ts

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { generateItem, Item } from './miscellaneous/items';
33
import { Misc } from './miscellaneous/misc';
44
import { Settings, DevSettings, DatasourceGet } from '../src/component/interfaces/index';
55

6-
const baseSettings: Settings = {
6+
const baseSettings = {
77
startIndex: 1,
88
minIndex: 1,
99
maxIndex: 100,
@@ -14,12 +14,20 @@ const baseSettings: Settings = {
1414
const configList: TestBedConfig[] = [{
1515
datasourceSettings: { ...baseSettings },
1616
custom: {
17-
indexToReplace: 3 // visible replace
17+
indexToReplace: baseSettings.minIndex + 1,
18+
token: 'middle'
1819
}
1920
}, {
2021
datasourceSettings: { ...baseSettings },
2122
custom: {
22-
indexToReplace: 50 // invisible replace
23+
indexToReplace: baseSettings.minIndex,
24+
token: 'first'
25+
}
26+
}, {
27+
datasourceSettings: { ...baseSettings, startIndex: baseSettings.maxIndex },
28+
custom: {
29+
indexToReplace: baseSettings.maxIndex,
30+
token: 'last'
2331
}
2432
}];
2533

@@ -40,6 +48,7 @@ const getDatasourceClass = (settings: Settings) =>
4048
}
4149

4250
this.settings = { ...settings };
51+
// this.devSettings = { debug: true, logProcessRun: true };
4352

4453
this.get = (index: number, count: number, success: Function) => {
4554
const data = [];
@@ -71,34 +80,45 @@ configList.forEach(config => config.datasourceClass = getDatasourceClass(config.
7180
const shouldReplace = (config: TestBedConfig) => (misc: Misc) => async (done: Function) => {
7281
await misc.relaxNext();
7382
const { adapter } = misc;
74-
const { custom: { indexToReplace }, datasourceSettings: { minIndex, itemSize } } = config;
83+
const { custom: { indexToReplace, token }, datasourceSettings: { minIndex, itemSize } } = config;
7584
const replaceOne = (misc.datasource as any).replaceOne.bind(misc.datasource);
76-
const scrollPosition = (indexToReplace - 1 + minIndex - 1) * itemSize;
85+
const maxScrollPosition = misc.getMaxScrollPosition();
86+
const position = token === 'last' ? maxScrollPosition : (indexToReplace - 1 + minIndex - 1) * itemSize;
7787
const newItem = generateItem(indexToReplace);
7888
newItem.text += '*';
7989

90+
// replace at the Datasource level
8091
replaceOne(indexToReplace, newItem);
8192

93+
// replace at the Viewport level (Adapter)
8294
await adapter.replace({
8395
predicate: ({ $index }) => $index === indexToReplace,
8496
items: [newItem]
8597
});
8698

8799
await misc.scrollMinMax();
88-
adapter.fix({ scrollPosition });
89-
await misc.relaxNext();
90100

91-
expect(adapter.firstVisible.$index).toEqual(indexToReplace);
101+
// scroll to replaced item
102+
if (misc.getScrollPosition() !== position) {
103+
adapter.fix({ scrollPosition: position });
104+
await misc.relaxNext();
105+
}
106+
107+
if (token === 'last') {
108+
expect(adapter.lastVisible.$index).toEqual(indexToReplace);
109+
} else {
110+
expect(adapter.firstVisible.$index).toEqual(indexToReplace);
111+
}
92112
expect(misc.getElementText(indexToReplace)).toEqual(indexToReplace + ': ' + newItem.text);
93113
done();
94114
};
95115

96116
describe('Adapter Replace Spec', () => {
97117

98-
describe('simple replacement', () =>
118+
describe('single replacement', () =>
99119
configList.forEach(config =>
100120
makeTest({
101-
title: 'should work',
121+
title: `should work (${config.custom.token})`,
102122
config,
103123
it: shouldReplace(config)
104124
})

tests/miscellaneous/misc.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ export class Misc {
136136
return this.getScrollableElement()[this.horizontal ? 'scrollLeft' : 'scrollTop'];
137137
}
138138

139+
getMaxScrollPosition(): number {
140+
return this.getScrollableSize() - this.getViewportSize();
141+
}
142+
139143
scrollTo(value: number, native?: boolean) {
140144
if (native) {
141145
this.getScrollableElement()[this.horizontal ? 'scrollLeft' : 'scrollTop'] = value;

0 commit comments

Comments
 (0)