123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945 |
- import {
- MessageSchemaSourceEnum,
- SortOrder,
- TopicColumnsToSort,
- ConfigSource,
- } from 'generated-sources';
- import reducer, {
- clearTopicsMessages,
- setTopicsSearch,
- setTopicsOrderBy,
- fetchTopicConsumerGroups,
- fetchTopicMessageSchema,
- recreateTopic,
- createTopic,
- deleteTopic,
- fetchTopicsList,
- fetchTopicDetails,
- fetchTopicConfig,
- updateTopic,
- updateTopicPartitionsCount,
- updateTopicReplicationFactor,
- deleteTopics,
- } from 'redux/reducers/topics/topicsSlice';
- import {
- createTopicPayload,
- createTopicResponsePayload,
- } from 'components/Topics/New/__test__/fixtures';
- import { consumerGroupPayload } from 'redux/reducers/consumerGroups/__test__/fixtures';
- import fetchMock from 'fetch-mock-jest';
- import mockStoreCreator from 'redux/store/configureStore/mockStoreCreator';
- import { getTypeAndPayload } from 'lib/testHelpers';
- import {
- alertAdded,
- showSuccessAlert,
- } from 'redux/reducers/alerts/alertsSlice';
- const topic = {
- name: 'topic',
- };
- const messageSchema = {
- key: {
- name: 'key',
- source: MessageSchemaSourceEnum.SCHEMA_REGISTRY,
- schema: `{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://example.com/myURI.schema.json",
- "title": "TestRecord",
- "type": "object",
- "additionalProperties": false,
- "properties": {
- "f1": {
- "type": "integer"
- },
- "f2": {
- "type": "string"
- },
- "schema": {
- "type": "string"
- }
- }
- }
- `,
- },
- value: {
- name: 'value',
- source: MessageSchemaSourceEnum.SCHEMA_REGISTRY,
- schema: `{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://example.com/myURI1.schema.json",
- "title": "TestRecord",
- "type": "object",
- "additionalProperties": false,
- "properties": {
- "f1": {
- "type": "integer"
- },
- "f2": {
- "type": "string"
- },
- "schema": {
- "type": "string"
- }
- }
- }
- `,
- },
- };
- const config = [
- {
- name: 'compression.type',
- value: 'producer',
- defaultValue: 'producer',
- source: ConfigSource.DYNAMIC_TOPIC_CONFIG,
- isSensitive: false,
- isReadOnly: false,
- synonyms: [
- {
- name: 'compression.type',
- value: 'producer',
- source: ConfigSource.DYNAMIC_TOPIC_CONFIG,
- },
- {
- name: 'compression.type',
- value: 'producer',
- source: ConfigSource.DEFAULT_CONFIG,
- },
- ],
- },
- ];
- const details = {
- name: 'local',
- internal: false,
- partitionCount: 1,
- replicationFactor: 1,
- replicas: 1,
- inSyncReplicas: 1,
- segmentSize: 0,
- segmentCount: 0,
- cleanUpPolicy: 'DELETE',
- partitions: [
- {
- partition: 0,
- leader: 1,
- replicas: [{ broker: 1, leader: false, inSync: true }],
- offsetMax: 0,
- offsetMin: 0,
- },
- ],
- bytesInPerSec: 0.1,
- bytesOutPerSec: 0.1,
- };
- let state = {
- byName: {
- [topic.name]: topic,
- },
- allNames: [topic.name],
- messages: [],
- totalPages: 1,
- search: '',
- orderBy: null,
- sortOrder: SortOrder.ASC,
- consumerGroups: [],
- };
- const clusterName = 'local';
- describe('topics Slice', () => {
- describe('topics reducer', () => {
- describe('fetch topic details', () => {
- it('fetchTopicDetails/fulfilled', () => {
- expect(
- reducer(state, {
- type: fetchTopicDetails.fulfilled,
- payload: {
- clusterName,
- topicName: topic.name,
- topicDetails: details,
- },
- })
- ).toEqual({
- ...state,
- byName: {
- [topic.name]: {
- ...topic,
- ...details,
- },
- },
- allNames: [topic.name],
- });
- });
- });
- describe('fetch topics', () => {
- it('fetchTopicsList/fulfilled', () => {
- expect(
- reducer(state, {
- type: fetchTopicsList.fulfilled,
- payload: { clusterName, topicName: topic.name },
- })
- ).toEqual({
- ...state,
- byName: { topic },
- allNames: [topic.name],
- });
- });
- });
- describe('fetch topic config', () => {
- it('fetchTopicConfig/fulfilled', () => {
- expect(
- reducer(state, {
- type: fetchTopicConfig.fulfilled,
- payload: {
- clusterName,
- topicName: topic.name,
- topicConfig: config,
- },
- })
- ).toEqual({
- ...state,
- byName: {
- [topic.name]: {
- ...topic,
- config: config.map((conf) => ({ ...conf })),
- },
- },
- allNames: [topic.name],
- });
- });
- });
- describe('update topic', () => {
- it('updateTopic/fulfilled', () => {
- const updatedTopic = {
- name: 'topic',
- partitions: 1,
- };
- expect(
- reducer(state, {
- type: updateTopic.fulfilled,
- payload: {
- clusterName,
- topicName: topic.name,
- topic: updatedTopic,
- },
- })
- ).toEqual({
- ...state,
- byName: {
- [topic.name]: {
- ...updatedTopic,
- },
- },
- });
- });
- });
- describe('delete topic', () => {
- it('deleteTopic/fulfilled', () => {
- expect(
- reducer(state, {
- type: deleteTopic.fulfilled,
- payload: { clusterName, topicName: topic.name },
- })
- ).toEqual({
- ...state,
- byName: {},
- allNames: [],
- });
- });
- it('clearTopicsMessages/fulfilled', () => {
- expect(
- reducer(state, {
- type: clearTopicsMessages.fulfilled,
- payload: { clusterName, topicName: topic.name },
- })
- ).toEqual({
- ...state,
- messages: [],
- });
- });
- it('recreateTopic/fulfilled', () => {
- expect(
- reducer(state, {
- type: recreateTopic.fulfilled,
- payload: { topic, topicName: topic.name },
- })
- ).toEqual({
- ...state,
- byName: {
- [topic.name]: topic,
- },
- });
- });
- });
- describe('create topics', () => {
- it('createTopic/fulfilled', () => {
- expect(
- reducer(state, {
- type: createTopic.fulfilled,
- payload: { clusterName, data: createTopicPayload },
- })
- ).toEqual({
- ...state,
- });
- });
- });
- describe('search topics', () => {
- it('setTopicsSearch', () => {
- expect(
- reducer(state, {
- type: setTopicsSearch,
- payload: 'test',
- })
- ).toEqual({
- ...state,
- search: 'test',
- });
- });
- });
- describe('order topics', () => {
- it('setTopicsOrderBy', () => {
- expect(
- reducer(state, {
- type: setTopicsOrderBy,
- payload: TopicColumnsToSort.NAME,
- })
- ).toEqual({
- ...state,
- orderBy: TopicColumnsToSort.NAME,
- });
- });
- });
- describe('topic consumer groups', () => {
- it('fetchTopicConsumerGroups/fulfilled', () => {
- expect(
- reducer(state, {
- type: fetchTopicConsumerGroups.fulfilled,
- payload: {
- clusterName,
- topicName: topic.name,
- consumerGroups: consumerGroupPayload,
- },
- })
- ).toEqual({
- ...state,
- byName: {
- [topic.name]: {
- ...topic,
- ...consumerGroupPayload,
- },
- },
- });
- });
- });
- describe('message sending', () => {
- it('fetchTopicMessageSchema/fulfilled', () => {
- state = {
- byName: {
- [topic.name]: topic,
- },
- allNames: [topic.name],
- messages: [],
- totalPages: 1,
- search: '',
- orderBy: null,
- sortOrder: SortOrder.ASC,
- consumerGroups: [],
- };
- expect(
- reducer(state, {
- type: fetchTopicMessageSchema.fulfilled,
- payload: { topicName: topic.name, schema: messageSchema },
- }).byName
- ).toEqual({
- [topic.name]: { ...topic, messageSchema },
- });
- });
- });
- });
- describe('Thunks', () => {
- const store = mockStoreCreator;
- const topicName = topic.name;
- const RealDate = Date.now;
- beforeAll(() => {
- global.Date.now = jest.fn(() =>
- new Date('2019-04-07T10:20:30Z').getTime()
- );
- });
- afterAll(() => {
- global.Date.now = RealDate;
- });
- afterEach(() => {
- fetchMock.restore();
- store.clearActions();
- });
- describe('fetchTopicsList', () => {
- const topicResponse = {
- pageCount: 1,
- topics: [createTopicResponsePayload],
- };
- it('fetchTopicsList/fulfilled', async () => {
- fetchMock.getOnce(`/api/clusters/${clusterName}/topics`, topicResponse);
- await store.dispatch(fetchTopicsList({ clusterName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicsList.pending.type },
- {
- type: fetchTopicsList.fulfilled.type,
- payload: { ...topicResponse },
- },
- ]);
- });
- it('fetchTopicsList/rejected', async () => {
- fetchMock.getOnce(`/api/clusters/${clusterName}/topics`, 404);
- await store.dispatch(fetchTopicsList({ clusterName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicsList.pending.type },
- {
- type: fetchTopicsList.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('fetchTopicDetails', () => {
- it('fetchTopicDetails/fulfilled', async () => {
- fetchMock.getOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- details
- );
- await store.dispatch(fetchTopicDetails({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicDetails.pending.type },
- {
- type: fetchTopicDetails.fulfilled.type,
- payload: { topicDetails: { ...details }, topicName },
- },
- ]);
- });
- it('fetchTopicDetails/rejected', async () => {
- fetchMock.getOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- 404
- );
- await store.dispatch(fetchTopicDetails({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicDetails.pending.type },
- {
- type: fetchTopicDetails.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('fetchTopicConfig', () => {
- it('fetchTopicConfig/fulfilled', async () => {
- fetchMock.getOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/config`,
- config
- );
- await store.dispatch(fetchTopicConfig({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicConfig.pending.type },
- {
- type: fetchTopicConfig.fulfilled.type,
- payload: {
- topicConfig: config,
- topicName,
- },
- },
- ]);
- });
- it('fetchTopicConfig/rejected', async () => {
- fetchMock.getOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/config`,
- 404
- );
- await store.dispatch(fetchTopicConfig({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicConfig.pending.type },
- {
- type: fetchTopicConfig.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}/config`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('deleteTopic', () => {
- it('deleteTopic/fulfilled', async () => {
- fetchMock.deleteOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- topicName
- );
- await store.dispatch(deleteTopic({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: deleteTopic.pending.type },
- { type: showSuccessAlert.pending.type },
- {
- type: alertAdded.type,
- payload: {
- id: 'message-topic-local',
- title: '',
- type: 'success',
- createdAt: global.Date.now(),
- message: 'Topic successfully deleted!',
- },
- },
- { type: showSuccessAlert.fulfilled.type },
- {
- type: deleteTopic.fulfilled.type,
- payload: { topicName },
- },
- ]);
- });
- it('deleteTopic/rejected', async () => {
- fetchMock.deleteOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- 404
- );
- await store.dispatch(deleteTopic({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: deleteTopic.pending.type },
- {
- type: deleteTopic.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('deleteTopics', () => {
- it('deleteTopics/fulfilled', async () => {
- fetchMock.delete(`/api/clusters/${clusterName}/topics/${topicName}`, [
- topicName,
- 'topic2',
- ]);
- await store.dispatch(
- deleteTopics({ clusterName, topicNames: [topicName, 'topic2'] })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: deleteTopics.pending.type },
- { type: deleteTopic.pending.type },
- { type: deleteTopic.pending.type },
- { type: fetchTopicsList.pending.type },
- { type: deleteTopics.fulfilled.type },
- ]);
- });
- });
- describe('recreateTopic', () => {
- const recreateResponse = {
- cleanUpPolicy: 'DELETE',
- inSyncReplicas: 1,
- internal: false,
- name: topicName,
- partitionCount: 1,
- partitions: undefined,
- replicas: 1,
- replicationFactor: 1,
- segmentCount: 0,
- segmentSize: 0,
- underReplicatedPartitions: undefined,
- };
- it('recreateTopic/fulfilled', async () => {
- fetchMock.postOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- recreateResponse
- );
- await store.dispatch(recreateTopic({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: recreateTopic.pending.type },
- { type: showSuccessAlert.pending.type },
- {
- type: alertAdded.type,
- payload: {
- id: 'message-topic-local',
- title: '',
- type: 'success',
- createdAt: global.Date.now(),
- message: 'Topic successfully recreated!',
- },
- },
- { type: showSuccessAlert.fulfilled.type },
- {
- type: recreateTopic.fulfilled.type,
- payload: { [topicName]: { ...recreateResponse } },
- },
- ]);
- });
- it('recreateTopic/rejected', async () => {
- fetchMock.postOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- 404
- );
- await store.dispatch(recreateTopic({ clusterName, topicName }));
- expect(getTypeAndPayload(store)).toEqual([
- { type: recreateTopic.pending.type },
- {
- type: recreateTopic.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('fetchTopicConsumerGroups', () => {
- const consumerGroups = [
- {
- groupId: 'groupId1',
- members: 0,
- topics: 1,
- simple: false,
- partitionAssignor: '',
- coordinator: {
- id: 1,
- port: undefined,
- host: 'host',
- },
- messagesBehind: undefined,
- state: undefined,
- },
- {
- groupId: 'groupId2',
- members: 0,
- topics: 1,
- simple: false,
- partitionAssignor: '',
- coordinator: {
- id: 1,
- port: undefined,
- host: 'host',
- },
- messagesBehind: undefined,
- state: undefined,
- },
- ];
- it('fetchTopicConsumerGroups/fulfilled', async () => {
- fetchMock.getOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/consumer-groups`,
- consumerGroups
- );
- await store.dispatch(
- fetchTopicConsumerGroups({ clusterName, topicName })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicConsumerGroups.pending.type },
- {
- type: fetchTopicConsumerGroups.fulfilled.type,
- payload: { consumerGroups, topicName },
- },
- ]);
- });
- it('fetchTopicConsumerGroups/rejected', async () => {
- fetchMock.getOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/consumer-groups`,
- 404
- );
- await store.dispatch(
- fetchTopicConsumerGroups({ clusterName, topicName })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: fetchTopicConsumerGroups.pending.type },
- {
- type: fetchTopicConsumerGroups.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}/consumer-groups`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('updateTopicPartitionsCount', () => {
- it('updateTopicPartitionsCount/fulfilled', async () => {
- fetchMock.patchOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/partitions`,
- { message: 'success' }
- );
- await store.dispatch(
- updateTopicPartitionsCount({
- clusterName,
- topicName,
- partitions: 1,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: updateTopicPartitionsCount.pending.type },
- { type: showSuccessAlert.pending.type },
- {
- type: alertAdded.type,
- payload: {
- id: 'message-topic-local-1',
- title: '',
- type: 'success',
- createdAt: global.Date.now(),
- message: 'Number of partitions successfully increased!',
- },
- },
- { type: fetchTopicDetails.pending.type },
- { type: showSuccessAlert.fulfilled.type },
- {
- type: updateTopicPartitionsCount.fulfilled.type,
- },
- ]);
- });
- it('updateTopicPartitionsCount/rejected', async () => {
- fetchMock.patchOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/partitions`,
- 404
- );
- await store.dispatch(
- updateTopicPartitionsCount({
- clusterName,
- topicName,
- partitions: 1,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: updateTopicPartitionsCount.pending.type },
- {
- type: updateTopicPartitionsCount.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}/partitions`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('updateTopicReplicationFactor', () => {
- it('updateTopicReplicationFactor/fulfilled', async () => {
- fetchMock.patchOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/replications`,
- { message: 'success' }
- );
- await store.dispatch(
- updateTopicReplicationFactor({
- clusterName,
- topicName,
- replicationFactor: 1,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: updateTopicReplicationFactor.pending.type },
- {
- type: updateTopicReplicationFactor.fulfilled.type,
- },
- ]);
- });
- it('updateTopicReplicationFactor/rejected', async () => {
- fetchMock.patchOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/replications`,
- 404
- );
- await store.dispatch(
- updateTopicReplicationFactor({
- clusterName,
- topicName,
- replicationFactor: 1,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: updateTopicReplicationFactor.pending.type },
- {
- type: updateTopicReplicationFactor.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}/replications`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('createTopic', () => {
- const newTopic = {
- name: 'newTopic',
- partitions: 0,
- replicationFactor: 0,
- minInSyncReplicas: 0,
- cleanupPolicy: 'DELETE',
- retentionMs: 1,
- retentionBytes: 1,
- maxMessageBytes: 1,
- customParams: [
- {
- name: '',
- value: '',
- },
- ],
- };
- it('createTopic/fulfilled', async () => {
- fetchMock.postOnce(`/api/clusters/${clusterName}/topics`, {
- message: 'success',
- });
- await store.dispatch(
- createTopic({
- clusterName,
- data: newTopic,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: createTopic.pending.type },
- {
- type: createTopic.fulfilled.type,
- },
- ]);
- });
- it('createTopic/rejected', async () => {
- fetchMock.postOnce(`/api/clusters/${clusterName}/topics`, 404);
- await store.dispatch(
- createTopic({
- clusterName,
- data: newTopic,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: createTopic.pending.type },
- {
- type: createTopic.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('updateTopic', () => {
- const updateTopicResponse = {
- name: topicName,
- partitions: 0,
- replicationFactor: 0,
- minInSyncReplicas: 0,
- cleanupPolicy: 'DELETE',
- retentionMs: 0,
- retentionBytes: 0,
- maxMessageBytes: 0,
- customParams: {
- byIndex: {},
- allIndexes: [],
- },
- };
- it('updateTopic/fulfilled', async () => {
- fetchMock.patchOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- createTopicResponsePayload
- );
- await store.dispatch(
- updateTopic({
- clusterName,
- topicName,
- form: updateTopicResponse,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: updateTopic.pending.type },
- {
- type: updateTopic.fulfilled.type,
- payload: { [topicName]: { ...createTopicResponsePayload } },
- },
- ]);
- });
- it('updateTopic/rejected', async () => {
- fetchMock.patchOnce(
- `/api/clusters/${clusterName}/topics/${topicName}`,
- 404
- );
- await store.dispatch(
- updateTopic({
- clusterName,
- topicName,
- form: updateTopicResponse,
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: updateTopic.pending.type },
- {
- type: updateTopic.rejected.type,
- payload: {
- status: 404,
- statusText: 'Not Found',
- url: `/api/clusters/${clusterName}/topics/${topicName}`,
- message: undefined,
- },
- },
- ]);
- });
- });
- describe('clearTopicsMessages', () => {
- it('clearTopicsMessages/fulfilled', async () => {
- fetchMock.deleteOnce(
- `/api/clusters/${clusterName}/topics/${topicName}/messages`,
- [topicName, 'topic2']
- );
- await store.dispatch(
- clearTopicsMessages({
- clusterName,
- topicNames: [topicName, 'topic2'],
- })
- );
- expect(getTypeAndPayload(store)).toEqual([
- { type: clearTopicsMessages.pending.type },
- { type: clearTopicsMessages.fulfilled.type },
- ]);
- });
- });
- });
- });
|