diff --git a/app/soapbox/actions/__tests__/suggestions.test.ts b/app/soapbox/actions/__tests__/suggestions.test.ts
new file mode 100644
index 000000000..76e53d576
--- /dev/null
+++ b/app/soapbox/actions/__tests__/suggestions.test.ts
@@ -0,0 +1,108 @@
+import { Map as ImmutableMap } from 'immutable';
+
+import { __stub } from 'soapbox/api';
+import { mockStore } from 'soapbox/jest/test-helpers';
+import rootReducer from 'soapbox/reducers';
+
+import {
+ fetchSuggestions,
+} from '../suggestions';
+
+let store;
+let state;
+
+describe('fetchSuggestions()', () => {
+ describe('with Truth Social software', () => {
+ beforeEach(() => {
+ state = rootReducer(undefined, {})
+ .set('instance', {
+ version: '3.4.1 (compatible; TruthSocial 1.0.0)',
+ pleroma: ImmutableMap({
+ metadata: ImmutableMap({
+ features: [],
+ }),
+ }),
+ })
+ .set('me', '123');
+ store = mockStore(state);
+ });
+
+ describe('with a successful API request', () => {
+ const response = [
+ {
+ account_id: '1',
+ acct: 'jl',
+ account_avatar: 'https://example.com/some.jpg',
+ display_name: 'justin',
+ note: '
note
',
+ verified: true,
+ },
+ ];
+
+ beforeEach(() => {
+ __stub((mock) => {
+ mock.onGet('/api/v1/truth/carousels/suggestions').reply(200, response, {
+ link: '; rel=\'prev\'',
+ });
+ });
+ });
+
+ it('dispatches the correct actions', async() => {
+ const expectedActions = [
+ { type: 'SUGGESTIONS_V2_FETCH_REQUEST', skipLoading: true },
+ {
+ type: 'ACCOUNTS_IMPORT', accounts: [{
+ acct: response[0].acct,
+ avatar: response[0].account_avatar,
+ avatar_static: response[0].account_avatar,
+ id: response[0].account_id,
+ note: response[0].note,
+ verified: response[0].verified,
+ display_name: response[0].display_name,
+ }],
+ },
+ {
+ type: 'SUGGESTIONS_TRUTH_FETCH_SUCCESS',
+ suggestions: response,
+ next: undefined,
+ skipLoading: true,
+ },
+ {
+ type: 'RELATIONSHIPS_FETCH_REQUEST',
+ skipLoading: true,
+ ids: [response[0].account_id],
+ },
+ ];
+ await store.dispatch(fetchSuggestions());
+ const actions = store.getActions();
+
+ expect(actions).toEqual(expectedActions);
+ });
+ });
+
+ describe('with an unsuccessful API request', () => {
+ beforeEach(() => {
+ __stub((mock) => {
+ mock.onGet('/api/v1/truth/carousels/suggestions').networkError();
+ });
+ });
+
+ it('should dispatch the correct actions', async() => {
+ const expectedActions = [
+ { type: 'SUGGESTIONS_V2_FETCH_REQUEST', skipLoading: true },
+ {
+ type: 'SUGGESTIONS_V2_FETCH_FAIL',
+ error: new Error('Network Error'),
+ skipLoading: true,
+ skipAlert: true,
+ },
+ ];
+
+ await store.dispatch(fetchSuggestions());
+ const actions = store.getActions();
+
+ expect(actions).toEqual(expectedActions);
+ });
+ });
+ });
+});