• Publicity: Public Only All

navigation-procs.tcl

Tests that deal with the context bar creation.

Location:
packages/acs-tcl/tcl/test/navigation-procs.tcl
Created:
11 August 2006
Author:
Juan Pablo Amaya jpamaya@unicauca.edu.co

Procedures in this file

Detailed information

[ hide source ] | [ make this the default ]

Content File Source

ad_library {

    Tests that deal with the context bar creation.

    @author Juan Pablo Amaya jpamaya@unicauca.edu.co
    @creation-date 11 August 2006
}

namespace eval navigation::test {}

ad_proc -private navigation::test::context_bar_multirow_filter {} {
    Procedure for the context_bar_multirow test filter
} {
    aa_run_with_teardown -rollback -test_code {
        set testnode_1 [list "/navigation_test_node1/" navigation_test_node1 "GN's Sub-site"]
        set testnode_2 [list "[lindex $testnode_1 0]navigation_test_node2/" navigation_test_node2 "navigation_test_node2"]

        # Create hierarchy from the random created nodes
        set root_node [site_node::get_from_url -url "/"]
        set root_node_id [dict get $root_node node_id]

        # Create and mount new node. We also need a subsite underneath
        # or the context bar won't display them.
        set package_id1 [site_node::instantiate_and_mount \
                            -parent_node_id $root_node_id \
                            -node_name [lindex $testnode_1 1] \
                            -package_name [lindex $testnode_1 2]  \
                            -package_key "acs-subsite"]
        set idr_1 [dict get [site_node::get_from_object_id -object_id $package_id1] node_id]
        set package_id2 [site_node::instantiate_and_mount \
                            -parent_node_id $idr_1 \
                            -node_name [lindex $testnode_2 1] \
                            -package_name [lindex $testnode_2 2] \
                            -package_key "acs-subsite"]
        set idr_2 [dict get [site_node::get_from_object_id -object_id $package_id2] node_id]

        set node_id $idr_2
        set context "last"

        set page [ad_parse_template -params \
                      [list \
                           [list from_node $root_node_id] \
                           [list node_id $node_id] \
                           [list context $context]] \
                      "/packages/acs-tcl/tcl/test/multirow-test"]

    } -teardown_code {
        site_node::delete -node_id $idr_2
        #apm_package_instance_delete $package_id2
        site_node::delete -node_id $idr_1
        #apm_package_instance_delete $package_id1
    }
    ns_return 200 text/html $page

    return filter_return
}


aa_register_case \
    -cats {api smoke} \
    -procs {
        ad_context_bar_html
    } ad_context_bar_html {

    Test if returns an HTML fragment from a list.

} {

    set ref_list [list [list "/doc/doc0.html" "href0"] [list "/doc/doc1.html" "href1"] [list "/doc/doc2.html" "href2"]]
    set c {}
    set ref_list_print [foreach element $ref_list { append c [lindex $element 0] "  " [lindex $element 1]\n}]
    set separator "-"
    aa_log "List with three references:\n\n$c\nseparator= \" - \" "

    aa_equals "" [ad_context_bar_html -separator $separator $ref_list] \
        "<a href=\"[lindex $ref_list 0 0]\">[lindex $ref_list 0 1]</a> - <a href=\"[lindex $ref_list 1 0]\">[lindex $ref_list 1 1]</a> - [lindex $ref_list 2 0] [lindex $ref_list 2 1]"
}

aa_register_case -cats {
    api
    smoke
} -procs {
    ad_context_bar
    site_node::get
    site_node::mount
    site_node::newad_context_bar {

    Test if returns a well formed context_bar in HTML format from a site node.

} {

    aa_run_with_teardown -rollback -test_code {

        set main_node [site_node::get -url /]
        set this_package_id [ad_conn package_id]
        set this_package_name [db_string get_name {
            select instance_name from apm_packages
            where package_id = :this_package_id
        }]

        # Setup nodes from the context bar, create two random nodes to include
        set separator "-"
        set random1 [ad_generate_random_string]
        set testnode_1 [list "/$random1/" $this_package_name]

        set random2 [ad_generate_random_string]
        set testnode_2 [list "[lindex $testnode_1 0]$random2/" $this_package_name]

        set leave_node "ref_final"
        set root_node [list "/" [dict get $main_node instance_name]]
        if { [string match "admin/*" [ad_conn extra_url]] } {
            set admin_node [list "[ad_conn package_url]admin/" [_ acs-tcl.Administration]]
        } else {
            set admin_node ""
        }

        # Create hierarchy from the random created nodes
        set idp [dict get $main_node node_id]
        set idr_1 [site_node::new -name $random1 -parent_id $idp]
        set idr_2 [site_node::new -name $random2 -parent_id $idr_1]
        site_node::mount -node_id $idr_1 -object_id $this_package_id
        site_node::mount -node_id $idr_2 -object_id $this_package_id
        aa_log "Created two test sites nodes: testnode_1 = [lindex $testnode_1 1],\n\
                testnode_2 = [lindex $testnode_2 1]n\
                testnode_2 is a child of testnode_1"

        array set node  [site_node::get -node_id $idp]
        array set node1 [site_node::get -node_id $idr_1]
        array set node2 [site_node::get -node_id $idr_2]
        set msg ""
        append msg \
            "node0  $idp  parent $node(parent_id)  url $node(url) object_id $node(object_id)"\
            "\nnode1 $idr_1 parent $node1(parent_id)  url $node1(url) object_id $node1(object_id)" \
            "\nnode2 $idr_2 parent $node2(parent_id) url $node2(url) object_id $node2(object_id)"
        aa_log $msg

        #-----------------------------------------------------------------------
        # Case 1: node_id = testnode_1
        #-----------------------------------------------------------------------
        aa_log "Case 1: node_id = testnode_1 <$testnode_1>"
        set bar_components [list $root_node $testnode_1]
        if {$admin_node ne ""} {
            lappend bar_components $admin_node
        }
        #aa_log "bar_components $bar_components"
        set context_barp ""
        foreach value $bar_components {
            append context_barp \
                [subst {<a href="[ns_quotehtml [lindex $value 0]]">[ns_quotehtml [lindex $value 1]]</a> $separator }]
        }
        append context_barp "$leave_node"
        set context_bar [ad_context_bar -node_id $idr_1 -separator $separator $leave_node]

        # Test
        set msg [ns_quotehtml "ad_context_bar 1: '$context_bar'\nad_context_bar 2: '$context_barp'"]
        aa_log "<pre>$msg</pre>"
        aa_equals "Context_bar = $context_barp"  $context_bar $context_barp

        #-----------------------------------------------------------------------
        # Case 2: node_id = testnode_2 (testnode2 is a testnode_1 children)
        #-----------------------------------------------------------------------
        aa_log "Case 2: node_id = testnode_2 (testnode2 is a testnode_1 children)"
        set bar_components [list $root_node $testnode_1 $testnode_2]
        if {$admin_node ne ""} {
            lappend bar_components $admin_node
        }
        set context_barp ""
        foreach value $bar_components {
            append context_barp \
                [subst {<a href="[ns_quotehtml [lindex $value 0]]">[ns_quotehtml [lindex $value 1]]</a> $separator }]
        }
        append context_barp "$leave_node"
        set context_bar [ad_context_bar -node_id $idr_2 -separator $separator $leave_node]

        set msg [ns_quotehtml "ad_context_bar 1: '$context_bar'\nad_context_bar 2: '$context_barp'"]
        aa_log "<pre>$msg</pre>"

        aa_equals "Context_bar = $context_barp"  $context_bar $context_barp

        #----------------------------------------------------------------------------
        # Case 3: from_node = testnode_1 and node_id = testnode_2
        #----------------------------------------------------------------------------
        aa_log "Case 3: from_node = testnode_1 and node_id = testnode_2"
        set bar_components [list $testnode_1 $testnode_2]
        if {$admin_node ne ""} {
            lappend bar_components $admin_node
        }
        set context_barp ""
        foreach value $bar_components {
            append context_barp \
                [subst {<a href="[lindex $value 0]">[lindex $value 1]</a> $separator }]
        }
        append context_barp "$leave_node"
        set context_bar [ad_context_bar -from_node $idr_1 -node_id $idr_2 -separator $separator $leave_node]
        aa_equals "Context_bar = $context_barp"  $context_bar $context_barp
    }
}

aa_register_case \
    -cats {api smoke web} \
    -procs {
        ad_context_bar_multirow
        acs::test::http
        acs::test::reply_has_status_code
        lang::system::site_wide_locale
        lang::util::localize
        navigation::test::context_bar_multirow_filter
        site_node::get

        db_1row
    } \
    ad_context_bar_multirow {

    Test if returns a well formed context_bar in HTML format from a site node in a multirow.

} {
    # Setup nodes from the context bar, create two nodes to include
    set separator ""
    set testnode_1 [list "/navigation_test_node1/" "GN's Sub-site"]
    set testnode_2 [list "[lindex $testnode_1 0]navigation_test_node2/" "navigation_test_node2"]
    set main_node [site_node::get -url /]
    set root_node [list "/" [lang::util::localize [dict get $main_node instance_name] [lang::system::site_wide_locale]]]
    set last_node [list "" "last"]

    set bar_components [list $root_node $testnode_1 $testnode_2 $last_node]
    set context_barp ""
    foreach value $bar_components {
        append context_barp "<a href=\""
        append context_barp [lindex $value 0]
        append context_barp "\">"
        append context_barp [ns_quotehtml [lindex $value 1]]
        append context_barp "</a>"
    }
    ns_register_proc GET /test.testf {
        navigation::test::context_bar_multirow_filter
    }
    set d [acs::test::http /test.testf]
    acs::test::reply_has_status_code $d 200
    ns_unregister_op GET /test.testf

    set response_body [dict get $d body]
    #ns_log notice "CONTEXT  BARP $context_barp"
    #ns_log notice "RESPONSE BODY $response_body"
    aa_equals "Context bar" [ns_quotehtml $response_body] [ns_quotehtml $context_barp]
}

aa_register_case \
    -cats {api smoke production_safe} \
    -procs {
        ad_navbar
        ad_choice_bar
    } \
    ad_html_bars {

        Test procs that produce some HTML bar from a list of options.

    } {
        aa_section "ad_choice_bar"

        set items {1 2 3 4}
        set links {a b c d}
        set values {}
        aa_equals "With no values, proc returns nothing" \
            [ad_choice_bar $items $links $values""

        set items {1 2 3 4}
        set links {a b c d}
        set values {what ever we want to do}
        set bar [ad_choice_bar $items $links $values]
        aa_equals "The 'values' argument decides the number of elements" \
            [regsub -all -- {</a>} $bar {} _] [llength $values]
        foreach i $items l $links {
            aa_true "'$i' was rendered" {[string first $i $bar] >= 0}
            aa_true "'$l' was rendered" {[string first $l $bar] >= 0}
        }

        set items {1 2 3 4}
        set links {a b c d}
        set values {what ever we want to do}
        set selected what
        aa_true "The item corresponding to the selected value is emphasized" \
            {[string first <strong>1</strong> [ad_choice_bar $items $links $values $selected]] >= 0}

        aa_section "ad_navbar"

        set items {{a 1} {b 2} {c 3} {d 4}}
        set bar [ad_navbar {*}$items]
        aa_equals "A link is generated for every item in the arguments" \
            [regsub -all -- {</a>} $bar {} _] [llength $items]
        foreach i $items {
            lassign $i link label
            aa_true "'$link' was rendered" {[string first $link $bar] >= 0}
            aa_true "'$label' was rendered" {[string first $label $bar] >= 0}
        }
    }

# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: