react-native-easy-calendar
Version:
Customizable, easy-to-use, performant calendar components for React Native
138 lines (118 loc) • 3.85 kB
JavaScript
;
var _react = _interopRequireDefault(require("react"));
var _dayjs = _interopRequireDefault(require("dayjs"));
var _utc = _interopRequireDefault(require("dayjs/plugin/utc"));
var _reactNative = require("@testing-library/react-native");
var _Contexts = require("../Contexts");
var _Themes = require("../Themes");
var _Locales = require("../Locales");
var _Constants = require("../Constants");
var _Title = _interopRequireDefault(require("./Title"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
_dayjs.default.extend(_utc.default);
test('Title render without error', () => {
const title = new TitlePage({});
expect(title.component).toBeTruthy();
});
test('Title renders date string in default format', () => {
const title = new TitlePage({
date: '2020-09-18',
locale: _Locales.DefaultLocale
});
expect(title.text).toHaveTextContent('September 2020');
});
describe('Title format switches depending on the active view', () => {
test('Month view format', () => {
const title = new TitlePage({
date: '2020-09-18',
activeView: _Constants.VIEW.MONTH
});
expect(title.text).toHaveTextContent('September 2020');
});
test('Year view format', () => {
const title = new TitlePage({
date: '2020-09-18',
activeView: _Constants.VIEW.YEAR
});
expect(title.text).toHaveTextContent('2020');
});
});
test('Title receives locale context', () => {
const title = new TitlePage({
date: '2020-09-18',
locale: testLocale
});
expect(title.text).toHaveTextContent('I 2020');
});
test('Title calls onPress callback when clicked', () => {
const onPress = jest.fn();
const title = new TitlePage({
onPress
});
_reactNative.fireEvent.press(title.component);
expect(onPress).toHaveBeenCalledTimes(1);
});
describe('Enabling and disabling', () => {
test('Disable clicking if prop ´isDisabled´ is true', () => {
const month = new TitlePage({
isDisabled: true
});
expect(month.component).toBeDisabled();
});
test('Enable clicking if prop ´isDisabled´ is false', () => {
const month = new TitlePage({
isDisabled: false
});
expect(month.component).toBeEnabled();
});
});
describe('Theme context', () => {
test('Title container applies titleContainer theme', () => {
const title = new TitlePage({});
expect(title.component).toHaveStyle(theme.titleContainer);
});
test('Title text applies titleText theme', () => {
const title = new TitlePage({});
expect(title.text).toHaveStyle(theme.titleText);
});
});
class TitlePage {
constructor({
date = '2020-01-01',
locale = _Locales.DefaultLocale,
onPress = () => {},
isDisabled = false,
activeView = _Constants.VIEW.MONTH
}) {
_defineProperty(this, "component", void 0);
_defineProperty(this, "text", void 0);
const {
getByTestId,
getByRole
} = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_Contexts.ThemeContext.Provider, {
value: theme
}, /*#__PURE__*/_react.default.createElement(_Title.default, {
locale,
activeView,
date,
onPress,
isDisabled
})));
this.component = getByRole('button');
this.text = getByTestId('title-text');
}
}
const testLocale = { ..._Locales.DefaultLocale,
months: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']
};
const theme = { ..._Themes.DefaultTheme,
titleContainer: {
marginTop: 10,
backgroundColor: 'orange'
},
titleText: {
color: 'pink'
}
};
//# sourceMappingURL=Title.test.js.map