@Override
    public Delete.Output run(RunContext runContext) throws Exception {
        StorageInterface storageInterface = ((DefaultRunContext)runContext).getApplicationContext().getBean(StorageInterface.class);
        URI render = URI.create(runContext.render(this.uri));

        boolean delete = storageInterface.delete(runContext.tenantId(), render);

        if (errorOnMissing && !delete) {
            throw new NoSuchElementException("Unable to find file '" + render + "'");
        }

        return Output.builder()
            .uri(render)
            .deleted(delete)
            .build();
    }
@Test
    void run() throws Exception {
        RunContext runContext = runContextFactory.of();
        URL resource = DeleteTest.class.getClassLoader().getResource("application-test.yml");

        URI put = storageInterface.put(
            null,
            new URI("/file/storage/get.yml"),
            new FileInputStream(Objects.requireNonNull(resource).getFile())
        );


        Delete bash = Delete.builder()
            .uri(put.toString())
            .build();

        Delete.Output run = bash.run(runContext);
        assertThat(run.getDeleted(), is(true));

        run = bash.run(runContext);
        assertThat(run.getDeleted(), is(false));

        assertThrows(NoSuchElementException.class, () -> {
            Delete error = Delete.builder()
                .uri(put.toString())
                .errorOnMissing(true)
                .build();

            error.run(runContext);
        });
    }