diff --git a/ghost/portal/src/components/common/ActionButton.test.js b/ghost/portal/src/components/common/ActionButton.test.js
new file mode 100644
index 0000000000..ceb43b4d07
--- /dev/null
+++ b/ghost/portal/src/components/common/ActionButton.test.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import {render, fireEvent} from '@testing-library/react';
+import ActionButton from './ActionButton';
+
+const setup = (overrides) => {
+ const mockOnClickFn = jest.fn();
+ const props = {
+ label: 'Test Action Button', onClick: mockOnClickFn, disabled: false
+ };
+ const utils = render(
+
+ );
+
+ const buttonEl = utils.queryByRole('button', {name: props.label});
+ return {
+ buttonEl,
+ mockOnClickFn,
+ ...utils
+ };
+};
+
+describe('ActionButton', () => {
+ test('renders', () => {
+ const {buttonEl} = setup();
+ expect(buttonEl).toBeInTheDocument();
+ });
+
+ test('fires onClick', () => {
+ const {buttonEl, mockOnClickFn} = setup();
+
+ fireEvent.click(buttonEl);
+ expect(mockOnClickFn).toHaveBeenCalled();
+ });
+});
diff --git a/ghost/portal/src/components/common/InputField.test.js b/ghost/portal/src/components/common/InputField.test.js
new file mode 100644
index 0000000000..c6cde81c9e
--- /dev/null
+++ b/ghost/portal/src/components/common/InputField.test.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import {render, fireEvent} from '@testing-library/react';
+import InputField from './InputField';
+
+const setup = (overrides = {}) => {
+ const mockOnChangeFn = jest.fn();
+ const props = {
+ name: 'test-input',
+ label: 'Test Input',
+ value: '',
+ placeholder: 'Test placeholder',
+ onChange: mockOnChangeFn
+ };
+ const utils = render(
+
+ );
+
+ const inputEl = utils.getByLabelText(props.label);
+ return {
+ inputEl,
+ mockOnChangeFn,
+ ...utils
+ };
+};
+
+describe('InputField', () => {
+ test('renders', () => {
+ const {inputEl} = setup();
+ expect(inputEl).toBeInTheDocument();
+ });
+
+ test('calls onChange on value', () => {
+ const {inputEl, mockOnChangeFn} = setup();
+ fireEvent.change(inputEl, {target: {value: 'Test'}});
+
+ expect(mockOnChangeFn).toHaveBeenCalled();
+ });
+});