#!/usr/bin/env bats

bats_load_library bats-assert
bats_load_library bats-support

BLOG_DIR="website"
EMACS_DIR=".emacs.d"

setup() {

    mkdir -p $BLOG_DIR
    mkdir -p $EMACS_DIR

    cat << EOF > $EMACS_DIR/init.el
    (require 'ox-publish)
    (require 'org-publish-rss)
    (setq org-publish-project-alist
        '(("blog"
           :base-directory "$BLOG_DIR"
           :base-extension "org"
           :publishing-directory "$BLOG_DIR/public_html/"
           :publishing-function org-html-publish-to-html

           :html-link-home "https://example.com"

           :auto-rss t
           :rss-title "Example Posts"
           :rss-description "My example website."
           :rss-with-content all

           :completion-function org-publish-rss)
          ("static"
           :base-directory "$BLOG_DIR"
           :base-extension "css\\|jpg\\|png\||gif"
           :include ("rss.xml")
           :publishing-directory "$BLOG_DIR/public_html/"
           :publishing-function org-publish-attachment)
          ("example.com" :components ("blog" "static"))))
EOF

    cat << EOF > $BLOG_DIR/post1.org
* My first blog post

Lorem ipsum dolor.
EOF

    cat << EOF > $BLOG_DIR/post2.org
* My first blog post reviewed

As described in my [[file:post1.org][first blog post]]:
EOF
}

teardown() {
    rm -r "$EMACS_DIR"
    rm -r "$BLOG_DIR"
}

publishBlog() {
    emacs --batch -l $EMACS_DIR/init.el -f org-publish-all --kill
}


@test "setup works as expected" {
    run ls $BLOG_DIR
    assert_output --partial "post1.org"
    assert_output --partial "post2.org"
    run ls $EMACS_DIR
    assert_output "init.el"
}

@test "publish creates html files & rss.xml" {
    publishBlog
    run ls -l $BLOG_DIR/public_html
    assert_output --partial "post1.html"
    assert_output --partial "post2.html"
    assert_output --partial "rss.xml"
    run cat $BLOG_DIR/public_html/rss.xml
    assert_output --partial "My example website."
    assert_output --partial "Lorem ipsum dolor."
    assert_output --partial "As described in my <a href=\"https://example.com/post1.html\">first blog post</a>"
}
