#!/usr/bin/env perl

use v5.12.5;
use warnings;

our $VERSION = '9999.99.99_99'; # VERSION

use Test::More;
use Test::Warnings;
use Test::Output;

use File::Temp                qw(tmpnam);
use Module::Load::Conditional qw(check_install);
use Rex::Commands::Augeas;
use Rex::Commands::Run;

my $augeas_binary = 'augtool';
my $augeas_module = 'Config::Augeas';

my @augeas_backends;

if ( can_run($augeas_binary) ) {
  push @augeas_backends, $augeas_binary;
}

if ( check_install( module => $augeas_module ) ) {
  push @augeas_backends, $augeas_module;
}

if (@augeas_backends) {
  plan tests => 1 + scalar @augeas_backends;
}
else {
  plan skip_all => 'Could not find any Augeas backends';
}

my $file       = tmpnam();
my $test_value = 'rex';

for my $backend (@augeas_backends) {
  Rex::Config->set_local_augeas_backend($backend);

  subtest "Simplelines lens with $backend" => sub {
    plan tests => 7;

    Rex::Config->set_augeas_commands_prepend(
      [ "transform Simplelines incl $file", 'load', ] );

    my $path = '/files' . $file . '/1';

    is( -e $file, undef, 'test file does not exist yet' );

    # modify

    augeas modify => $path => $test_value;

    is( -e $file, 1, 'test file created' );

    # exists

    my $has_first_entry = augeas exists => $path;

    is( $has_first_entry, 1, 'first entry exists' );

    # get

    my $retrieved_value = augeas get => $path;

    is( $retrieved_value, $test_value, 'test value retrieved' );

    # dump

    stdout_is(
      sub { augeas dump => $path },
      qq($path = "$test_value"\n),
      'correct dump output'
    );

    # remove

    augeas remove => $path;

    my $still_has_first_entry = augeas exists => $path;

    is( $still_has_first_entry, 0, 'first entry removed' );

    unlink $file;

    is( -e $file, undef, 'test file cleaned up' );
  };
}