#!/usr/bin/env bash

testUsageIsShownWhenNoCommandIsSpecified() {
  echo '
  #!/usr/bin/env bash
  ' > go
  echo "source $REPO_ROOT/⚡" >> go
  chmod +x go

  try ./go
  assertContains "$STDOUT" "Usage"
}

testHelpSubcommandCannotBeOverridden() {
  echo '
  #!/usr/bin/env bash
  ⚡help() { echo "ah hah hah" ; }
  ' > go
  echo "source $REPO_ROOT/⚡" >> go
  chmod +x go

  try ./go help
  assertContains "$STDOUT" "Usage"
}

testHelpIncludesInvocationInstructions() {
  SCRIPT_NAME="foo-$RANDOM"
  echo '
  #!/usr/bin/env bash
  ' > $SCRIPT_NAME
  echo "source $REPO_ROOT/⚡" >> $SCRIPT_NAME
  chmod +x $SCRIPT_NAME

  try ./$SCRIPT_NAME help
  assertContains "$STDOUT" "$SCRIPT_NAME SUBCOMMAND"
}

testHelpListsAllAvailableLightningCommands() {
  echo '
  #!/usr/bin/env bash
  ⚡foo() { echo "ah hah hah" ; }
  ⚡bar() { echo "ah hah hah" ; }
  ⚡baz() { echo "ah hah hah" ; }
  ⚡potato() { echo "ah hah hah" ; }
  ' > go
  echo "source $REPO_ROOT/⚡" >> go
  chmod +x go

  try ./go help
  assertContains "$STDOUT" "foo"
  assertContains "$STDOUT" "bar"
  assertContains "$STDOUT" "baz"
  assertContains "$STDOUT" "potato"
  assertContains "$STDOUT" "help"
}

testHelpLinesFromDefinedCommandsAreShown() {
  echo '
  #!/usr/bin/env bash

  ⚡hello() {
   _help-line "Say Hello"
   echo "Hello, World!" ; 
  }
  ' > go

  echo "source $REPO_ROOT/⚡" >> go
  chmod +x go

  try ./go
  assertContains "$STDOUT" "Say Hello"
}

testHelpDoesNotExecuteFunctionsWithNoHelpLine() {
  echo '
  #!/usr/bin/env bash

  ⚡hello() { echo "Hello, World!" ; }
  ' > go

  echo "source $REPO_ROOT/⚡" >> go
  chmod +x go

  try ./go
  assertNotContains "$STDOUT" "Hello, World"
}

testLightningShouldNotBeIncludedInSubcommandNames() {
  echo '
  #!/usr/bin/env bash

  ⚡hello() { echo "Hello, World!" ; }
  ' > go

  echo "source $REPO_ROOT/⚡" >> go
  chmod +x go

  try ./go
  assertNotContains "$STDOUT" "⚡hello"
}

source $(dirname $0)/runner
