mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2025-01-09 09:47:28 +03:00
Dropped support to send tags to the PATCH endpoint
This commit is contained in:
parent
5a0d67e409
commit
9518ad9bb4
5 changed files with 4 additions and 61 deletions
|
@ -80,17 +80,6 @@ export default class ShlinkApiClient {
|
||||||
this.performRequest(`/short-urls/${shortCode}`, 'DELETE', { domain })
|
this.performRequest(`/short-urls/${shortCode}`, 'DELETE', { domain })
|
||||||
.then(() => {});
|
.then(() => {});
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated. If using Shlink 2.6.0 or greater, use updateShortUrl instead
|
|
||||||
*/
|
|
||||||
public readonly updateShortUrlTags = async (
|
|
||||||
shortCode: string,
|
|
||||||
domain: OptionalString,
|
|
||||||
tags: string[],
|
|
||||||
): Promise<string[]> =>
|
|
||||||
this.performRequest<{ tags: string[] }>(`/short-urls/${shortCode}/tags`, 'PUT', { domain }, { tags })
|
|
||||||
.then(({ data }) => data.tags);
|
|
||||||
|
|
||||||
public readonly updateShortUrl = async (
|
public readonly updateShortUrl = async (
|
||||||
shortCode: string,
|
shortCode: string,
|
||||||
domain: OptionalString,
|
domain: OptionalString,
|
||||||
|
|
|
@ -6,7 +6,6 @@ import { EditShortUrlData, ShortUrl } from '../data';
|
||||||
import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';
|
import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';
|
||||||
import { ProblemDetailsError } from '../../api/types';
|
import { ProblemDetailsError } from '../../api/types';
|
||||||
import { parseApiError } from '../../api/utils';
|
import { parseApiError } from '../../api/utils';
|
||||||
import { supportsTagsInPatch } from '../../utils/helpers/features';
|
|
||||||
import { ApiErrorAction } from '../../api/types/actions';
|
import { ApiErrorAction } from '../../api/types/actions';
|
||||||
|
|
||||||
export const EDIT_SHORT_URL_START = 'shlink/shortUrlEdition/EDIT_SHORT_URL_START';
|
export const EDIT_SHORT_URL_START = 'shlink/shortUrlEdition/EDIT_SHORT_URL_START';
|
||||||
|
@ -42,15 +41,10 @@ export const editShortUrl = (buildShlinkApiClient: ShlinkApiClientBuilder) => (
|
||||||
) => async (dispatch: Dispatch, getState: GetState) => {
|
) => async (dispatch: Dispatch, getState: GetState) => {
|
||||||
dispatch({ type: EDIT_SHORT_URL_START });
|
dispatch({ type: EDIT_SHORT_URL_START });
|
||||||
|
|
||||||
const { selectedServer } = getState();
|
const { updateShortUrl } = buildShlinkApiClient(getState);
|
||||||
const sendTagsSeparately = !supportsTagsInPatch(selectedServer);
|
|
||||||
const { updateShortUrl, updateShortUrlTags } = buildShlinkApiClient(getState);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const [shortUrl] = await Promise.all([
|
const shortUrl = await updateShortUrl(shortCode, domain, data as any); // FIXME parse dates;
|
||||||
updateShortUrl(shortCode, domain, data as any), // FIXME Parse dates
|
|
||||||
sendTagsSeparately && data.tags ? updateShortUrlTags(shortCode, domain, data.tags) : undefined,
|
|
||||||
]);
|
|
||||||
|
|
||||||
dispatch<ShortUrlEditedAction>({ shortUrl, type: SHORT_URL_EDITED });
|
dispatch<ShortUrlEditedAction>({ shortUrl, type: SHORT_URL_EDITED });
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
|
|
@ -8,7 +8,6 @@ export const supportsQrCodeSizeInQuery = serverMatchesVersions({ minVersion: '2.
|
||||||
export const supportsShortUrlTitle = serverMatchesVersions({ minVersion: '2.6.0' });
|
export const supportsShortUrlTitle = serverMatchesVersions({ minVersion: '2.6.0' });
|
||||||
export const supportsOrphanVisits = supportsShortUrlTitle;
|
export const supportsOrphanVisits = supportsShortUrlTitle;
|
||||||
export const supportsQrCodeMargin = supportsShortUrlTitle;
|
export const supportsQrCodeMargin = supportsShortUrlTitle;
|
||||||
export const supportsTagsInPatch = supportsShortUrlTitle;
|
|
||||||
export const supportsBotVisits = serverMatchesVersions({ minVersion: '2.7.0' });
|
export const supportsBotVisits = serverMatchesVersions({ minVersion: '2.7.0' });
|
||||||
export const supportsCrawlableVisits = supportsBotVisits;
|
export const supportsCrawlableVisits = supportsBotVisits;
|
||||||
export const supportsQrErrorCorrection = serverMatchesVersions({ minVersion: '2.8.0' });
|
export const supportsQrErrorCorrection = serverMatchesVersions({ minVersion: '2.8.0' });
|
||||||
|
|
|
@ -156,25 +156,6 @@ describe('ShlinkApiClient', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('updateShortUrlTags', () => {
|
|
||||||
it.each(shortCodesWithDomainCombinations)('properly updates short URL tags', async (shortCode, domain) => {
|
|
||||||
const expectedTags = ['foo', 'bar'];
|
|
||||||
const axiosSpy = createAxiosMock({
|
|
||||||
data: { tags: expectedTags },
|
|
||||||
});
|
|
||||||
const { updateShortUrlTags } = new ShlinkApiClient(axiosSpy, '', '');
|
|
||||||
|
|
||||||
const result = await updateShortUrlTags(shortCode, domain, expectedTags);
|
|
||||||
|
|
||||||
expect(expectedTags).toEqual(result);
|
|
||||||
expect(axiosSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
||||||
url: `/short-urls/${shortCode}/tags`,
|
|
||||||
method: 'PUT',
|
|
||||||
params: domain ? { domain } : {},
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('updateShortUrl', () => {
|
describe('updateShortUrl', () => {
|
||||||
it.each(shortCodesWithDomainCombinations)('properly updates short URL meta', async (shortCode, domain) => {
|
it.each(shortCodesWithDomainCombinations)('properly updates short URL meta', async (shortCode, domain) => {
|
||||||
const meta = {
|
const meta = {
|
||||||
|
|
|
@ -8,7 +8,7 @@ import reducer, {
|
||||||
} from '../../../src/short-urls/reducers/shortUrlEdition';
|
} from '../../../src/short-urls/reducers/shortUrlEdition';
|
||||||
import { ShlinkState } from '../../../src/container/types';
|
import { ShlinkState } from '../../../src/container/types';
|
||||||
import { ShortUrl } from '../../../src/short-urls/data';
|
import { ShortUrl } from '../../../src/short-urls/data';
|
||||||
import { ReachableServer, SelectedServer } from '../../../src/servers/data';
|
import { SelectedServer } from '../../../src/servers/data';
|
||||||
|
|
||||||
describe('shortUrlEditionReducer', () => {
|
describe('shortUrlEditionReducer', () => {
|
||||||
const longUrl = 'https://shlink.io';
|
const longUrl = 'https://shlink.io';
|
||||||
|
@ -41,8 +41,7 @@ describe('shortUrlEditionReducer', () => {
|
||||||
|
|
||||||
describe('editShortUrl', () => {
|
describe('editShortUrl', () => {
|
||||||
const updateShortUrl = jest.fn().mockResolvedValue(shortUrl);
|
const updateShortUrl = jest.fn().mockResolvedValue(shortUrl);
|
||||||
const updateShortUrlTags = jest.fn().mockResolvedValue([]);
|
const buildShlinkApiClient = jest.fn().mockReturnValue({ updateShortUrl });
|
||||||
const buildShlinkApiClient = jest.fn().mockReturnValue({ updateShortUrl, updateShortUrlTags });
|
|
||||||
const dispatch = jest.fn();
|
const dispatch = jest.fn();
|
||||||
const createGetState = (selectedServer: SelectedServer = null) => () => Mock.of<ShlinkState>({ selectedServer });
|
const createGetState = (selectedServer: SelectedServer = null) => () => Mock.of<ShlinkState>({ selectedServer });
|
||||||
|
|
||||||
|
@ -59,25 +58,6 @@ describe('shortUrlEditionReducer', () => {
|
||||||
expect(dispatch).toHaveBeenNthCalledWith(2, { type: SHORT_URL_EDITED, shortUrl });
|
expect(dispatch).toHaveBeenNthCalledWith(2, { type: SHORT_URL_EDITED, shortUrl });
|
||||||
});
|
});
|
||||||
|
|
||||||
it.each([
|
|
||||||
[null, { tags: ['foo', 'bar'] }, 1],
|
|
||||||
[null, {}, 0],
|
|
||||||
[Mock.of<ReachableServer>({ version: '2.6.0' }), {}, 0],
|
|
||||||
[Mock.of<ReachableServer>({ version: '2.6.0' }), { tags: ['foo', 'bar'] }, 0],
|
|
||||||
[Mock.of<ReachableServer>({ version: '2.5.0' }), {}, 0],
|
|
||||||
[Mock.of<ReachableServer>({ version: '2.5.0' }), { tags: ['foo', 'bar'] }, 1],
|
|
||||||
])(
|
|
||||||
'sends tags separately when appropriate, based on selected server and the payload',
|
|
||||||
async (server, payload, expectedTagsCalls) => {
|
|
||||||
const getState = createGetState(server);
|
|
||||||
|
|
||||||
await editShortUrl(buildShlinkApiClient)(shortCode, null, payload)(dispatch, getState);
|
|
||||||
|
|
||||||
expect(updateShortUrl).toHaveBeenCalled();
|
|
||||||
expect(updateShortUrlTags).toHaveBeenCalledTimes(expectedTagsCalls);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
it('dispatches error on failure', async () => {
|
it('dispatches error on failure', async () => {
|
||||||
const error = new Error();
|
const error = new Error();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue