Skip to content

Commit

Permalink
test: reduce code duplication in PathAssertionsSpec by introducing ex…
Browse files Browse the repository at this point in the history
…pectedPermissionTypeHintFor
  • Loading branch information
jGleitz committed Oct 1, 2020
1 parent 3fc64f1 commit c539d6f
Showing 1 changed file with 19 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ch.tutteli.atrium.specs.integration
import ch.tutteli.atrium.api.fluent.en_GB.*
import ch.tutteli.atrium.api.verbs.internal.expect
import ch.tutteli.atrium.creating.Expect
import ch.tutteli.atrium.reporting.translating.Translatable
import ch.tutteli.atrium.reporting.translating.TranslatableWithArgs
import ch.tutteli.atrium.specs.*
import ch.tutteli.atrium.translations.DescriptionBasic.*
Expand Down Expand Up @@ -409,20 +410,14 @@ abstract class PathAssertionsSpec(
val expectedPermissionHint = String.format(HINT_ACTUAL_POSIX_PERMISSIONS.getDefault(), "u=wx g=x o=")

it("throws an AssertionError for a file") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_FILE.getDefault(),
READABLE.getDefault()
)

val file = maybeLink.create(tempFolder.newFile("not-readable"))
file.whileWithPermissions(OWNER_WRITE, OWNER_EXECUTE, GROUP_EXECUTE) {
expect {
expect(file).isReadableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_FILE, being = READABLE),
expectedPermissionHint,
expectedPosixOwnerAndGroupHintFor(file)
)
Expand All @@ -432,20 +427,14 @@ abstract class PathAssertionsSpec(
}

it("throws an AssertionError for a directory") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_DIRECTORY.getDefault(),
READABLE.getDefault()
)

val folder = maybeLink.create(tempFolder.newDirectory("not-readable"))
folder.whileWithPermissions(OWNER_WRITE, OWNER_EXECUTE, GROUP_EXECUTE) {
expect {
expect(folder).isReadableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_DIRECTORY, being = READABLE),
expectedPermissionHint,
expectedPosixOwnerAndGroupHintFor(folder)
)
Expand All @@ -457,20 +446,14 @@ abstract class PathAssertionsSpec(

context("ACL: not readable", skip = ifAclNotSupported) {
it("throws an AssertionError for a file") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_FILE.getDefault(),
READABLE.getDefault()
)

val file = maybeLink.create(tempFolder.newFile("not-readable"))
file.whileWithAcl(TestAcls::ownerNoRead) {
expect {
expect(file).isReadableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_FILE, being = READABLE),
expectedAclOwnerHintFor(file),
HINT_ACTUAL_ACL_PERMISSIONS.getDefault()
)
Expand All @@ -486,20 +469,14 @@ abstract class PathAssertionsSpec(
}

it("throws an AssertionError for a directory") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_DIRECTORY.getDefault(),
READABLE.getDefault()
)

val folder = maybeLink.create(tempFolder.newDirectory("not-readable"))
folder.whileWithAcl(TestAcls::ownerNoRead) {
expect {
expect(folder).isReadableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_DIRECTORY, being = READABLE),
expectedAclOwnerHintFor(folder),
HINT_ACTUAL_ACL_PERMISSIONS.getDefault()
)
Expand Down Expand Up @@ -555,20 +532,14 @@ abstract class PathAssertionsSpec(
val expectedPermissionHint = String.format(HINT_ACTUAL_POSIX_PERMISSIONS.getDefault(), "u=rx g= o=x")

it("throws an AssertionError for a file") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_FILE.getDefault(),
WRITABLE.getDefault()
)

val file = maybeLink.create(tempFolder.newFile("not-writable"))
file.whileWithPermissions(OWNER_READ, OWNER_EXECUTE, OTHERS_EXECUTE) {
expect {
expect(file).isWritableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_FILE, being = WRITABLE),
expectedPermissionHint,
expectedPosixOwnerAndGroupHintFor(file)
)
Expand All @@ -578,20 +549,14 @@ abstract class PathAssertionsSpec(
}

it("throws an AssertionError for a directory") withAndWithoutSymlink { maybeLink ->
val expectedHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_DIRECTORY.getDefault(),
WRITABLE.getDefault()
)

val folder = maybeLink.create(tempFolder.newDirectory("not-writable"))
folder.whileWithPermissions(OWNER_READ, OWNER_EXECUTE, OTHERS_EXECUTE) {
expect {
expect(folder).isWritableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedHint,
expectedPermissionTypeHintFor(A_DIRECTORY, being = WRITABLE),
expectedPermissionHint,
expectedPosixOwnerAndGroupHintFor(folder)
)
Expand All @@ -603,20 +568,14 @@ abstract class PathAssertionsSpec(

context("ACL: not writable", skip = ifAclNotSupported) {
it("throws an AssertionError for a file") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_FILE.getDefault(),
WRITABLE.getDefault()
)

val file = maybeLink.create(tempFolder.newFile("not-writable"))
file.whileWithAcl(TestAcls::ownerNoWrite) {
expect {
expect(file).isWritableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_FILE, being = WRITABLE),
expectedAclOwnerHintFor(file),
HINT_ACTUAL_ACL_PERMISSIONS.getDefault()
)
Expand All @@ -630,20 +589,14 @@ abstract class PathAssertionsSpec(
}

it("throws an AssertionError for a directory") withAndWithoutSymlink { maybeLink ->
val expectedHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_DIRECTORY.getDefault(),
WRITABLE.getDefault()
)

val folder = maybeLink.create(tempFolder.newDirectory("not-writable"))
folder.whileWithAcl(TestAcls::ownerNoWrite) {
expect {
expect(folder).isWritableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedHint,
expectedPermissionTypeHintFor(A_DIRECTORY, being = WRITABLE),
expectedAclOwnerHintFor(folder),
HINT_ACTUAL_ACL_PERMISSIONS.getDefault()
)
Expand Down Expand Up @@ -714,20 +667,14 @@ abstract class PathAssertionsSpec(
val expectedPermissionHint = String.format(HINT_ACTUAL_POSIX_PERMISSIONS.getDefault(), "u=rw g=r o=")

it("throws an AssertionError for a file") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_FILE.getDefault(),
EXECUTABLE.getDefault()
)

val file = maybeLink.create(tempFolder.newFile("not-executable"))
file.whileWithPermissions(OWNER_WRITE, OWNER_READ, GROUP_READ) {
expect {
expect(file).isExecutableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_FILE, being = EXECUTABLE),
expectedPermissionHint,
expectedPosixOwnerAndGroupHintFor(file)
)
Expand All @@ -737,20 +684,14 @@ abstract class PathAssertionsSpec(
}

it("throws an AssertionError for a directory") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_DIRECTORY.getDefault(),
EXECUTABLE.getDefault()
)

val folder = maybeLink.create(tempFolder.newDirectory("not-executable"))
folder.whileWithPermissions(OWNER_WRITE, OWNER_READ, GROUP_READ) {
expect {
expect(folder).isExecutableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_DIRECTORY, being = EXECUTABLE),
expectedPermissionHint,
expectedPosixOwnerAndGroupHintFor(folder)
)
Expand All @@ -762,20 +703,14 @@ abstract class PathAssertionsSpec(

context("ACL: not executable", skip = ifAclNotSupported) {
it("throws an AssertionError for a file") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_FILE.getDefault(),
EXECUTABLE.getDefault()
)

val file = maybeLink.create(tempFolder.newFile("not-executable"))
file.whileWithAcl(TestAcls::ownerNoExecute) {
expect {
expect(file).isExecutableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_FILE, being = EXECUTABLE),
expectedAclOwnerHintFor(file),
HINT_ACTUAL_ACL_PERMISSIONS.getDefault()
)
Expand All @@ -791,20 +726,14 @@ abstract class PathAssertionsSpec(
}

it("throws an AssertionError for a directory") withAndWithoutSymlink { maybeLink ->
val expectedTypeHint = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
A_DIRECTORY.getDefault(),
EXECUTABLE.getDefault()
)

val folder = maybeLink.create(tempFolder.newDirectory("not-readable"))
folder.whileWithAcl(TestAcls::ownerNoExecute) {
expect {
expect(folder).isExecutableFun()
}.toThrow<AssertionError>().message {
contains(
expectedMessage,
expectedTypeHint,
expectedPermissionTypeHintFor(A_DIRECTORY, being = EXECUTABLE),
expectedAclOwnerHintFor(folder),
HINT_ACTUAL_ACL_PERMISSIONS.getDefault()
)
Expand Down Expand Up @@ -1264,3 +1193,9 @@ internal class SimpleLink(private val tempFolderProvider: () -> MemoizedTempFold

internal fun <T : CharSequence> Expect<T>.containsExplanationFor(maybeLink: MaybeLink) =
maybeLink.checkAssertionErrorMessage(this)

private fun expectedPermissionTypeHintFor(type: Translatable, being: Translatable) = String.format(
FAILURE_DUE_TO_PERMISSION_FILE_TYPE_HINT.getDefault(),
type.getDefault(),
being.getDefault()
)

0 comments on commit c539d6f

Please sign in to comment.