@sankei-arc-shared-components/element_general-link 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -1,57 +1,43 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = void 0;
9
-
10
8
  var _react = _interopRequireDefault(require("react"));
11
-
12
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
-
14
10
  var _lodash = _interopRequireDefault(require("lodash.endswith"));
15
-
16
11
  var extractHost = function extractHost(url) {
17
12
  var doubleSlash = '//';
18
-
19
13
  if (url.indexOf(doubleSlash) < 0) {
20
14
  return null;
21
15
  }
22
-
23
16
  var excludeProtocol = url.substring(url.indexOf(doubleSlash) + doubleSlash.length);
24
-
25
17
  if (excludeProtocol.indexOf('/') > 0) {
26
18
  return excludeProtocol.substring(0, excludeProtocol.indexOf('/'));
27
19
  }
28
-
29
20
  return excludeProtocol;
30
21
  };
31
-
32
22
  var isExternal = function isExternal(url) {
33
23
  var host = extractHost(url);
34
24
  return host && !(0, _lodash["default"])(host, 'sankei.com');
35
25
  };
36
-
37
26
  var GeneralLink = function GeneralLink(_ref) {
38
27
  var url = _ref.url,
39
- content = _ref.content,
40
- classList = _ref.classList;
41
-
28
+ content = _ref.content,
29
+ classList = _ref.classList;
42
30
  if (!url) {
43
31
  return null;
44
32
  }
45
-
46
33
  var needsNewTab = isExternal(url);
47
- return _react["default"].createElement("a", {
34
+ return /*#__PURE__*/_react["default"].createElement("a", {
48
35
  href: url,
49
36
  className: classList,
50
37
  target: needsNewTab ? '_blank' : null,
51
38
  rel: needsNewTab ? 'nofollow' : null
52
39
  }, content);
53
40
  };
54
-
55
41
  GeneralLink.propTypes = {
56
42
  classList: _propTypes["default"].string,
57
43
  url: _propTypes["default"].string.isRequired,
@@ -59,4 +45,4 @@ GeneralLink.propTypes = {
59
45
  };
60
46
  var _default = GeneralLink;
61
47
  exports["default"] = _default;
62
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVua25vd24iXSwibmFtZXMiOlsiZXh0cmFjdEhvc3QiLCJ1cmwiLCJkb3VibGVTbGFzaCIsImluZGV4T2YiLCJleGNsdWRlUHJvdG9jb2wiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJpc0V4dGVybmFsIiwiaG9zdCIsIkdlbmVyYWxMaW5rIiwiY29udGVudCIsImNsYXNzTGlzdCIsIm5lZWRzTmV3VGFiIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBRUEsSUFBTUEsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsR0FBRCxFQUFTO0FBQzNCLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjs7QUFDQSxNQUFJRCxHQUFHLENBQUNFLE9BQUosQ0FBWUQsV0FBWixJQUEyQixDQUEvQixFQUFrQztBQUNoQyxXQUFPLElBQVA7QUFDRDs7QUFDRCxNQUFNRSxlQUFlLEdBQUdILEdBQUcsQ0FBQ0ksU0FBSixDQUFjSixHQUFHLENBQUNFLE9BQUosQ0FBWUQsV0FBWixJQUEyQkEsV0FBVyxDQUFDSSxNQUFyRCxDQUF4Qjs7QUFDQSxNQUFJRixlQUFlLENBQUNELE9BQWhCLENBQXdCLEdBQXhCLElBQStCLENBQW5DLEVBQXNDO0FBQ3BDLFdBQU9DLGVBQWUsQ0FBQ0MsU0FBaEIsQ0FBMEIsQ0FBMUIsRUFBNkJELGVBQWUsQ0FBQ0QsT0FBaEIsQ0FBd0IsR0FBeEIsQ0FBN0IsQ0FBUDtBQUNEOztBQUNELFNBQU9DLGVBQVA7QUFDRCxDQVZEOztBQVlBLElBQU1HLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNOLEdBQUQsRUFBUztBQUMxQixNQUFNTyxJQUFJLEdBQUdSLFdBQVcsQ0FBQ0MsR0FBRCxDQUF4QjtBQUNBLFNBQU9PLElBQUksSUFBSSxDQUFDLHdCQUFTQSxJQUFULEVBQWUsWUFBZixDQUFoQjtBQUNELENBSEQ7O0FBS0EsSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsT0FBaUM7QUFBQSxNQUE5QlIsR0FBOEIsUUFBOUJBLEdBQThCO0FBQUEsTUFBekJTLE9BQXlCLFFBQXpCQSxPQUF5QjtBQUFBLE1BQWhCQyxTQUFnQixRQUFoQkEsU0FBZ0I7O0FBQ25ELE1BQUksQ0FBQ1YsR0FBTCxFQUFVO0FBQ1IsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFBTVcsV0FBVyxHQUFHTCxVQUFVLENBQUNOLEdBQUQsQ0FBOUI7QUFDQSxTQUNFO0FBQUcsSUFBQSxJQUFJLEVBQUVBLEdBQVQ7QUFDRyxJQUFBLFNBQVMsRUFBRVUsU0FEZDtBQUVHLElBQUEsTUFBTSxFQUFFQyxXQUFXLEdBQUcsUUFBSCxHQUFjLElBRnBDO0FBR0csSUFBQSxHQUFHLEVBQUVBLFdBQVcsR0FBRyxVQUFILEdBQWdCO0FBSG5DLEtBRzBDRixPQUgxQyxDQURGO0FBTUQsQ0FYRDs7QUFhQUQsV0FBVyxDQUFDSSxTQUFaLEdBQXdCO0FBQ3RCRixFQUFBQSxTQUFTLEVBQUVHLHNCQUFVQyxNQURDO0FBRXRCZCxFQUFBQSxHQUFHLEVBQUVhLHNCQUFVQyxNQUFWLENBQWlCQyxVQUZBO0FBR3RCTixFQUFBQSxPQUFPLEVBQUVJLHNCQUFVQyxNQUFWLENBQWlCQztBQUhKLENBQXhCO2VBTWVQLFciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IGVuZHN3aXRoIGZyb20gJ2xvZGFzaC5lbmRzd2l0aCc7XG5cbmNvbnN0IGV4dHJhY3RIb3N0ID0gKHVybCkgPT4ge1xuICBjb25zdCBkb3VibGVTbGFzaCA9ICcvLyc7XG4gIGlmICh1cmwuaW5kZXhPZihkb3VibGVTbGFzaCkgPCAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgZXhjbHVkZVByb3RvY29sID0gdXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZihkb3VibGVTbGFzaCkgKyBkb3VibGVTbGFzaC5sZW5ndGgpO1xuICBpZiAoZXhjbHVkZVByb3RvY29sLmluZGV4T2YoJy8nKSA+IDApIHtcbiAgICByZXR1cm4gZXhjbHVkZVByb3RvY29sLnN1YnN0cmluZygwLCBleGNsdWRlUHJvdG9jb2wuaW5kZXhPZignLycpKTtcbiAgfVxuICByZXR1cm4gZXhjbHVkZVByb3RvY29sO1xufTtcblxuY29uc3QgaXNFeHRlcm5hbCA9ICh1cmwpID0+IHtcbiAgY29uc3QgaG9zdCA9IGV4dHJhY3RIb3N0KHVybCk7XG4gIHJldHVybiBob3N0ICYmICFlbmRzd2l0aChob3N0LCAnc2Fua2VpLmNvbScpO1xufTtcblxuY29uc3QgR2VuZXJhbExpbmsgPSAoeyB1cmwsIGNvbnRlbnQsIGNsYXNzTGlzdCB9KSA9PiB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbmVlZHNOZXdUYWIgPSBpc0V4dGVybmFsKHVybCk7XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17dXJsfVxuICAgICAgIGNsYXNzTmFtZT17Y2xhc3NMaXN0fVxuICAgICAgIHRhcmdldD17bmVlZHNOZXdUYWIgPyAnX2JsYW5rJyA6IG51bGx9XG4gICAgICAgcmVsPXtuZWVkc05ld1RhYiA/ICdub2ZvbGxvdycgOiBudWxsfT57Y29udGVudH08L2E+XG4gICk7XG59O1xuXG5HZW5lcmFsTGluay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTGlzdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlbmVyYWxMaW5rO1xuIl19
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfbG9kYXNoIiwiZXh0cmFjdEhvc3QiLCJ1cmwiLCJkb3VibGVTbGFzaCIsImluZGV4T2YiLCJleGNsdWRlUHJvdG9jb2wiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJpc0V4dGVybmFsIiwiaG9zdCIsImVuZHN3aXRoIiwiR2VuZXJhbExpbmsiLCJfcmVmIiwiY29udGVudCIsImNsYXNzTGlzdCIsIm5lZWRzTmV3VGFiIiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJjbGFzc05hbWUiLCJ0YXJnZXQiLCJyZWwiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsidW5rbm93biJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IGVuZHN3aXRoIGZyb20gJ2xvZGFzaC5lbmRzd2l0aCc7XG5cbmNvbnN0IGV4dHJhY3RIb3N0ID0gKHVybCkgPT4ge1xuICBjb25zdCBkb3VibGVTbGFzaCA9ICcvLyc7XG4gIGlmICh1cmwuaW5kZXhPZihkb3VibGVTbGFzaCkgPCAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgZXhjbHVkZVByb3RvY29sID0gdXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZihkb3VibGVTbGFzaCkgKyBkb3VibGVTbGFzaC5sZW5ndGgpO1xuICBpZiAoZXhjbHVkZVByb3RvY29sLmluZGV4T2YoJy8nKSA+IDApIHtcbiAgICByZXR1cm4gZXhjbHVkZVByb3RvY29sLnN1YnN0cmluZygwLCBleGNsdWRlUHJvdG9jb2wuaW5kZXhPZignLycpKTtcbiAgfVxuICByZXR1cm4gZXhjbHVkZVByb3RvY29sO1xufTtcblxuY29uc3QgaXNFeHRlcm5hbCA9ICh1cmwpID0+IHtcbiAgY29uc3QgaG9zdCA9IGV4dHJhY3RIb3N0KHVybCk7XG4gIHJldHVybiBob3N0ICYmICFlbmRzd2l0aChob3N0LCAnc2Fua2VpLmNvbScpO1xufTtcblxuY29uc3QgR2VuZXJhbExpbmsgPSAoeyB1cmwsIGNvbnRlbnQsIGNsYXNzTGlzdCB9KSA9PiB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbmVlZHNOZXdUYWIgPSBpc0V4dGVybmFsKHVybCk7XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17dXJsfVxuICAgICAgIGNsYXNzTmFtZT17Y2xhc3NMaXN0fVxuICAgICAgIHRhcmdldD17bmVlZHNOZXdUYWIgPyAnX2JsYW5rJyA6IG51bGx9XG4gICAgICAgcmVsPXtuZWVkc05ld1RhYiA/ICdub2ZvbGxvdycgOiBudWxsfT57Y29udGVudH08L2E+XG4gICk7XG59O1xuXG5HZW5lcmFsTGluay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTGlzdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlbmVyYWxMaW5rO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBTUcsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlDLEdBQUcsRUFBSztFQUMzQixJQUFNQyxXQUFXLEdBQUcsSUFBSTtFQUN4QixJQUFJRCxHQUFHLENBQUNFLE9BQU8sQ0FBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQ2hDLE9BQU8sSUFBSTtFQUNiO0VBQ0EsSUFBTUUsZUFBZSxHQUFHSCxHQUFHLENBQUNJLFNBQVMsQ0FBQ0osR0FBRyxDQUFDRSxPQUFPLENBQUNELFdBQVcsQ0FBQyxHQUFHQSxXQUFXLENBQUNJLE1BQU0sQ0FBQztFQUNwRixJQUFJRixlQUFlLENBQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDcEMsT0FBT0MsZUFBZSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFRCxlQUFlLENBQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuRTtFQUNBLE9BQU9DLGVBQWU7QUFDeEIsQ0FBQztBQUVELElBQU1HLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJTixHQUFHLEVBQUs7RUFDMUIsSUFBTU8sSUFBSSxHQUFHUixXQUFXLENBQUNDLEdBQUcsQ0FBQztFQUM3QixPQUFPTyxJQUFJLElBQUksQ0FBQyxJQUFBQyxrQkFBUSxFQUFDRCxJQUFJLEVBQUUsWUFBWSxDQUFDO0FBQzlDLENBQUM7QUFFRCxJQUFNRSxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQUMsSUFBQSxFQUFvQztFQUFBLElBQTlCVixHQUFHLEdBQUFVLElBQUEsQ0FBSFYsR0FBRztJQUFFVyxPQUFPLEdBQUFELElBQUEsQ0FBUEMsT0FBTztJQUFFQyxTQUFTLEdBQUFGLElBQUEsQ0FBVEUsU0FBUztFQUM1QyxJQUFJLENBQUNaLEdBQUcsRUFBRTtJQUNSLE9BQU8sSUFBSTtFQUNiO0VBQ0EsSUFBTWEsV0FBVyxHQUFHUCxVQUFVLENBQUNOLEdBQUcsQ0FBQztFQUNuQyxvQkFDRU4sTUFBQSxZQUFBb0IsYUFBQTtJQUFHQyxJQUFJLEVBQUVmLEdBQUk7SUFDVmdCLFNBQVMsRUFBRUosU0FBVTtJQUNyQkssTUFBTSxFQUFFSixXQUFXLEdBQUcsUUFBUSxHQUFHLElBQUs7SUFDdENLLEdBQUcsRUFBRUwsV0FBVyxHQUFHLFVBQVUsR0FBRztFQUFLLEdBQUVGLE9BQVcsQ0FBQztBQUUxRCxDQUFDO0FBRURGLFdBQVcsQ0FBQ1UsU0FBUyxHQUFHO0VBQ3RCUCxTQUFTLEVBQUVRLHFCQUFTLENBQUNDLE1BQU07RUFDM0JyQixHQUFHLEVBQUVvQixxQkFBUyxDQUFDQyxNQUFNLENBQUNDLFVBQVU7RUFDaENYLE9BQU8sRUFBRVMscUJBQVMsQ0FBQ0MsTUFBTSxDQUFDQztBQUM1QixDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUVhZCxXQUFXO0FBQUFlLE9BQUEsY0FBQUQsUUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sankei-arc-shared-components/element_general-link",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Shared General Link Component",
5
5
  "main": "build/index.js",
6
6
  "repository": {
@@ -8,12 +8,11 @@
8
8
  "url": "https://github.com/wapopartners/sankei-shimbun-shared-components/packages/element_general_link"
9
9
  },
10
10
  "peerDependencies": {
11
- "enzyme": "^3.7.0",
12
11
  "lodash.endswith": "^4.2.1",
13
12
  "lodash.get": "^4.4.2",
14
- "prop-types": "^15.6.2",
15
- "react": ">=16",
16
- "react-dom": "^16.6.1"
13
+ "prop-types": ">=15",
14
+ "react": ">=18",
15
+ "react-dom": ">=18"
17
16
  },
18
17
  "publishConfig": {
19
18
  "access": "public"
@@ -22,6 +21,5 @@
22
21
  "license": "ISC",
23
22
  "dependencies": {
24
23
  "@babel/runtime": "^7.4.3"
25
- },
26
- "gitHead": "d6346fa9df1b29a98b3e468ad68a82ef89c1bb0c"
24
+ }
27
25
  }
package/src/index.test.js CHANGED
@@ -1,146 +1,79 @@
1
1
  import React from 'react';
2
- import { shallow } from 'enzyme';
2
+ import { render, screen } from '@testing-library/react';
3
3
  import GeneralLink from './index';
4
4
 
5
5
  describe('<GeneralLink>', () => {
6
6
  it('should render an internal link', () => {
7
- const testProps = {
8
- url: 'https://www.sankei.com',
9
- content: 'dummy',
10
- };
11
- const instance = shallow(<GeneralLink {...testProps} />);
12
- expect(instance).toBeDefined();
13
- expect(instance.find('a').at(0).html()).toBe(
14
- `<a href="${testProps.url}">${testProps.content}</a>`,
15
- );
16
- instance.unmount();
7
+ render(<GeneralLink url="https://www.sankei.com" content="dummy" />);
8
+ const link = screen.getByRole('link', { name: 'dummy' });
9
+ expect(link).toHaveAttribute('href', 'https://www.sankei.com');
10
+ expect(link).not.toHaveAttribute('target');
11
+ expect(link).not.toHaveAttribute('rel');
17
12
  });
18
13
 
19
14
  it('should render internal link with trailing slash', () => {
20
- const testProps = {
21
- url: 'https://www.sankei.com/',
22
- content: 'dummy',
23
- };
24
- const instance = shallow(<GeneralLink {...testProps} />);
25
- expect(instance).toBeDefined();
26
- expect(instance.find('a').at(0).html()).toBe(
27
- `<a href="${testProps.url}">${testProps.content}</a>`,
28
- );
29
- instance.unmount();
15
+ render(<GeneralLink url="https://www.sankei.com/" content="dummy" />);
16
+ const link = screen.getByRole('link', { name: 'dummy' });
17
+ expect(link).toHaveAttribute('href', 'https://www.sankei.com/');
30
18
  });
31
19
 
32
20
  it('should render internal link when special is present', () => {
33
- const testProps = {
34
- url: 'https://special.sankei.com',
35
- content: 'dummy',
36
- };
37
- const instance = shallow(<GeneralLink {...testProps} />);
38
- expect(instance).toBeDefined();
39
- expect(instance.find('a').at(0).html()).toBe(
40
- `<a href="${testProps.url}">${testProps.content}</a>`,
41
- );
42
- instance.unmount();
21
+ render(<GeneralLink url="https://special.sankei.com" content="dummy" />);
22
+ const link = screen.getByRole('link', { name: 'dummy' });
23
+ expect(link).toHaveAttribute('href', 'https://special.sankei.com');
24
+ expect(link).not.toHaveAttribute('target');
43
25
  });
44
26
 
45
27
  it('should render internal link when double slash starts', () => {
46
- const testProps = {
47
- url: '//www.sankei.com',
48
- content: 'dummy',
49
- };
50
- const instance = shallow(<GeneralLink {...testProps} />);
51
- expect(instance).toBeDefined();
52
- expect(instance.find('a').at(0).html()).toBe(
53
- `<a href="${testProps.url}">${testProps.content}</a>`,
54
- );
55
- instance.unmount();
28
+ render(<GeneralLink url="//www.sankei.com" content="dummy" />);
29
+ const link = screen.getByRole('link', { name: 'dummy' });
30
+ expect(link).toHaveAttribute('href', '//www.sankei.com');
56
31
  });
57
32
 
58
33
  it('should render internal link with double slash and special', () => {
59
- const testProps = {
60
- url: '//special.sankei.com/test',
61
- content: 'dummy',
62
- };
63
- const instance = shallow(<GeneralLink {...testProps} />);
64
- expect(instance).toBeDefined();
65
- expect(instance.find('a').at(0).html()).toBe(
66
- `<a href="${testProps.url}">${testProps.content}</a>`,
67
- );
68
- instance.unmount();
34
+ render(<GeneralLink url="//special.sankei.com/test" content="dummy" />);
35
+ const link = screen.getByRole('link', { name: 'dummy' });
36
+ expect(link).toHaveAttribute('href', '//special.sankei.com/test');
69
37
  });
70
38
 
71
39
  it('should render internal link since relative link', () => {
72
- const testProps = {
73
- url: '/sports',
74
- content: 'dummy',
75
- };
76
- const instance = shallow(<GeneralLink {...testProps} />);
77
- expect(instance).toBeDefined();
78
- expect(instance.find('a').at(0).html()).toBe(
79
- `<a href="${testProps.url}">${testProps.content}</a>`,
80
- );
81
- instance.unmount();
40
+ render(<GeneralLink url="/sports" content="dummy" />);
41
+ const link = screen.getByRole('link', { name: 'dummy' });
42
+ expect(link).toHaveAttribute('href', '/sports');
82
43
  });
83
44
 
84
45
  it('should render internal link since no domain', () => {
85
- const testProps = {
86
- url: 'terms.html',
87
- content: 'dummy',
88
- };
89
- const instance = shallow(<GeneralLink {...testProps} />);
90
- expect(instance).toBeDefined();
91
- expect(instance.find('a').at(0).html()).toBe(
92
- `<a href="${testProps.url}">${testProps.content}</a>`,
93
- );
94
- instance.unmount();
46
+ render(<GeneralLink url="terms.html" content="dummy" />);
47
+ const link = screen.getByRole('link', { name: 'dummy' });
48
+ expect(link).toHaveAttribute('href', 'terms.html');
95
49
  });
96
50
 
97
-
98
51
  it('should render external link since youtube', () => {
99
- const testProps = {
100
- url: 'https://youtube.com/',
101
- content: 'dummy',
102
- };
103
- const instance = shallow(<GeneralLink {...testProps} />);
104
- expect(instance).toBeDefined();
105
- expect(instance.find('a').at(0).html()).toBe(
106
- `<a href="${testProps.url}" target="_blank" rel="nofollow">${testProps.content}</a>`,
107
- );
108
- instance.unmount();
52
+ render(<GeneralLink url="https://youtube.com/" content="dummy" />);
53
+ const link = screen.getByRole('link', { name: 'dummy' });
54
+ expect(link).toHaveAttribute('href', 'https://youtube.com/');
55
+ expect(link).toHaveAttribute('target', '_blank');
56
+ expect(link).toHaveAttribute('rel', 'nofollow');
109
57
  });
110
58
 
111
-
112
59
  it('should render external link since ends with youtube with double slash', () => {
113
- const testProps = {
114
- url: '//youtube.com/',
115
- content: 'dummy',
116
- };
117
- const instance = shallow(<GeneralLink {...testProps} />);
118
- expect(instance).toBeDefined();
119
- expect(instance.find('a').at(0).html()).toBe(
120
- `<a href="${testProps.url}" target="_blank" rel="nofollow">${testProps.content}</a>`,
121
- );
122
- instance.unmount();
60
+ render(<GeneralLink url="//youtube.com/" content="dummy" />);
61
+ const link = screen.getByRole('link', { name: 'dummy' });
62
+ expect(link).toHaveAttribute('href', '//youtube.com/');
63
+ expect(link).toHaveAttribute('target', '_blank');
64
+ expect(link).toHaveAttribute('rel', 'nofollow');
123
65
  });
124
66
 
125
67
  it('should render external link since ends with foo', () => {
126
- const testProps = {
127
- url: '//sankei.com.foo.com/',
128
- content: 'dummy',
129
- };
130
- const instance = shallow(<GeneralLink {...testProps} />);
131
- expect(instance).toBeDefined();
132
- expect(instance.find('a').at(0).html()).toBe(
133
- `<a href="${testProps.url}" target="_blank" rel="nofollow">${testProps.content}</a>`,
134
- );
135
- instance.unmount();
68
+ render(<GeneralLink url="//sankei.com.foo.com/" content="dummy" />);
69
+ const link = screen.getByRole('link', { name: 'dummy' });
70
+ expect(link).toHaveAttribute('href', '//sankei.com.foo.com/');
71
+ expect(link).toHaveAttribute('target', '_blank');
72
+ expect(link).toHaveAttribute('rel', 'nofollow');
136
73
  });
137
74
 
138
75
  it('should return null', () => {
139
- const testProps = {
140
- url: null,
141
- };
142
- const instance = shallow(<GeneralLink {...testProps} />);
143
- expect(instance).toBeDefined();
144
- expect(instance.find('a')).toHaveLength(0);
76
+ const { container } = render(<GeneralLink url={null} />);
77
+ expect(container).toBeEmptyDOMElement();
145
78
  });
146
79
  });