|
| 1 | +package com.devonfw.sample.archunit; |
| 2 | + |
| 3 | +import org.assertj.core.api.Assertions; |
| 4 | +import org.junit.jupiter.api.Test; |
| 5 | + |
| 6 | +/** |
| 7 | + * Test of {@link PackageStructure}. |
| 8 | + */ |
| 9 | +public class PackageStructureTest extends Assertions { |
| 10 | + |
| 11 | + /** Test of {@link PackageStructure#of(String)} with valid examples. */ |
| 12 | + @Test |
| 13 | + public void testValid() { |
| 14 | + |
| 15 | + checkValid("com.customer.app.mycomponent.dataaccess.api.detail1.detail2", "mycomponent", "dataaccess", "api", |
| 16 | + "detail1.detail2"); |
| 17 | + checkValid("com.customer.app.foo.logic.uc", "foo", "logic", "", "uc"); |
| 18 | + checkValid("com.customer.app.bar.common", "bar", "common"); |
| 19 | + checkValid("com.customer.app.some.service.rest", "some", "service", "", "rest"); |
| 20 | + } |
| 21 | + |
| 22 | + /** Test of {@link PackageStructure#of(String)} with invalid examples. */ |
| 23 | + @Test |
| 24 | + public void testInvalid() { |
| 25 | + |
| 26 | + checkInvalid("com.customer.app.mycomponent.dataaacceess.api.detail1.detail2"); |
| 27 | + checkInvalid("com.customer.app.mycomponent.api"); |
| 28 | + checkInvalid("com.customer.app.mycomponent"); |
| 29 | + checkInvalid("com.customer.app"); |
| 30 | + checkInvalid("com.customer"); |
| 31 | + checkInvalid("com"); |
| 32 | + checkInvalid("."); |
| 33 | + } |
| 34 | + |
| 35 | + private PackageStructure checkValid(String pkgName, String component, String layer) { |
| 36 | + |
| 37 | + return checkValid(pkgName, component, layer, ""); |
| 38 | + } |
| 39 | + |
| 40 | + private PackageStructure checkValid(String pkgName, String component, String layer, String scope) { |
| 41 | + |
| 42 | + return checkValid(pkgName, component, layer, scope, ""); |
| 43 | + } |
| 44 | + |
| 45 | + private PackageStructure checkValid(String pkgName, String component, String layer, String scope, String detail) { |
| 46 | + |
| 47 | + return checkValid(pkgName, component, layer, scope, detail, "com.customer.app"); |
| 48 | + } |
| 49 | + |
| 50 | + // given |
| 51 | + private PackageStructure checkValid(String pkgName, String component, String layer, String scope, String detail, |
| 52 | + String root) { |
| 53 | + |
| 54 | + // when |
| 55 | + PackageStructure pkg = PackageStructure.of(pkgName); |
| 56 | + // then |
| 57 | + assertThat(pkg.getPackage()).isEqualTo(pkgName); |
| 58 | + assertThat(pkg.getRoot()).isEqualTo(root); |
| 59 | + assertThat(pkg.getComponent()).isEqualTo(component); |
| 60 | + assertThat(pkg.getLayer()).isEqualTo(layer); |
| 61 | + checkLayer(layer, pkg); |
| 62 | + assertThat(pkg.getScope()).isEqualTo(scope); |
| 63 | + checkScope(scope, pkg); |
| 64 | + assertThat(pkg.getDetail()).isEqualTo(detail); |
| 65 | + assertThat(pkg.hasDetail()).isEqualTo(!detail.isEmpty()); |
| 66 | + assertThat(pkg.isValid()).isTrue(); |
| 67 | + return pkg; |
| 68 | + } |
| 69 | + |
| 70 | + private void checkScope(String scope, PackageStructure pkg) { |
| 71 | + |
| 72 | + if (scope.isEmpty()) { |
| 73 | + assertThat(pkg.hasScope()).isFalse(); |
| 74 | + } else { |
| 75 | + assertThat(pkg.hasScope()).isTrue(); |
| 76 | + boolean isApi = false; |
| 77 | + boolean isBase = false; |
| 78 | + boolean isImpl = false; |
| 79 | + if (PackageStructure.SCOPE_API.equals(scope)) { |
| 80 | + isApi = true; |
| 81 | + } else if (PackageStructure.SCOPE_BASE.equals(scope)) { |
| 82 | + isBase = true; |
| 83 | + } else if (PackageStructure.SCOPE_IMPLEMENTATION.equals(scope)) { |
| 84 | + isImpl = true; |
| 85 | + } else { |
| 86 | + throw new IllegalStateException(scope); |
| 87 | + } |
| 88 | + assertThat(pkg.isScopeApi()).isEqualTo(isApi); |
| 89 | + assertThat(pkg.isScopeBase()).isEqualTo(isBase); |
| 90 | + assertThat(pkg.isScopeImpl()).isEqualTo(isImpl); |
| 91 | + } |
| 92 | + } |
| 93 | + |
| 94 | + private void checkLayer(String layer, PackageStructure pkg) { |
| 95 | + |
| 96 | + boolean isService = false; |
| 97 | + boolean isLogic = false; |
| 98 | + boolean isDataAccess = false; |
| 99 | + boolean isCommon = false; |
| 100 | + boolean isBatch = false; |
| 101 | + boolean isClient = false; |
| 102 | + if (PackageStructure.LAYER_SERVICE.equals(layer)) { |
| 103 | + isService = true; |
| 104 | + } else if (PackageStructure.LAYER_LOGIC.equals(layer)) { |
| 105 | + isLogic = true; |
| 106 | + } else if (PackageStructure.LAYER_DATA_ACCESS.equals(layer)) { |
| 107 | + isDataAccess = true; |
| 108 | + } else if (PackageStructure.LAYER_COMMON.equals(layer)) { |
| 109 | + isCommon = true; |
| 110 | + } else if (PackageStructure.LAYER_BATCH.equals(layer)) { |
| 111 | + isBatch = true; |
| 112 | + } else if (PackageStructure.LAYER_CLIENT.equals(layer)) { |
| 113 | + isClient = true; |
| 114 | + } else { |
| 115 | + throw new IllegalStateException(layer); |
| 116 | + } |
| 117 | + assertThat(pkg.isLayerService()).isEqualTo(isService); |
| 118 | + assertThat(pkg.isLayerLogic()).isEqualTo(isLogic); |
| 119 | + assertThat(pkg.isLayerDataAccess()).isEqualTo(isDataAccess); |
| 120 | + assertThat(pkg.isLayerCommon()).isEqualTo(isCommon); |
| 121 | + assertThat(pkg.isLayerBatch()).isEqualTo(isBatch); |
| 122 | + assertThat(pkg.isLayerClient()).isEqualTo(isClient); |
| 123 | + } |
| 124 | + |
| 125 | + // given |
| 126 | + private void checkInvalid(String pkgName) { |
| 127 | + |
| 128 | + // when |
| 129 | + PackageStructure pkg = PackageStructure.of(pkgName); |
| 130 | + // then |
| 131 | + assertThat(pkg.getPackage()).isEqualTo(pkgName); |
| 132 | + assertThat(pkg.getRoot()).isEqualTo(""); |
| 133 | + assertThat(pkg.getComponent()).isEqualTo(""); |
| 134 | + assertThat(pkg.getLayer()).isEqualTo(""); |
| 135 | + assertThat(pkg.getScope()).isEqualTo(""); |
| 136 | + assertThat(pkg.hasScope()).isFalse(); |
| 137 | + assertThat(pkg.getDetail()).isEqualTo(""); |
| 138 | + assertThat(pkg.hasDetail()).isFalse(); |
| 139 | + assertThat(pkg.isValid()).isFalse(); |
| 140 | + |
| 141 | + } |
| 142 | + |
| 143 | +} |
0 commit comments