Index: openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl 12 Apr 2019 11:48:01 -0000 1.5 +++ openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl 12 Apr 2019 12:09:58 -0000 1.6 @@ -17,25 +17,25 @@ #################### ::xolp::iri::MetaClass create ::xolp::Activity \ - -table_name xolp_activity_dimension \ - -pretty_name "Learning Activity" \ - -id_column activity_version_id \ - -iri_unique false \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create description - ::xo::db::Attribute create package_id -datatype integer - ::xo::db::Attribute create package_url - ::xo::db::Attribute create begin_timestamp -datatype date - ::xo::db::Attribute create end_timestamp -datatype date - ::xo::db::Attribute create scd_valid_from -datatype date -default "1900-01-01" - ::xo::db::Attribute create scd_valid_to -datatype date -default "9999-12-31" - } -ad_doc { - Activity Dimension - Slowly Changing Dimension - Note, as the pretty_name "Activity" is already taken in OpenACS, we use "Learning Activity" - (although not all xolp activities necessarily have a learning effect). - } + -table_name xolp_activity_dimension \ + -pretty_name "Learning Activity" \ + -id_column activity_version_id \ + -iri_unique false \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create description + ::xo::db::Attribute create package_id -datatype integer + ::xo::db::Attribute create package_url + ::xo::db::Attribute create begin_timestamp -datatype date + ::xo::db::Attribute create end_timestamp -datatype date + ::xo::db::Attribute create scd_valid_from -datatype date -default "1900-01-01" + ::xo::db::Attribute create scd_valid_to -datatype date -default "9999-12-31" + } -ad_doc { + Activity Dimension + Slowly Changing Dimension + Note, as the pretty_name "Activity" is already taken in OpenACS, we use "Learning Activity" + (although not all xolp activities necessarily have a learning effect). + } #::xo::db::require index -table xolp_activity_dimension -col "iri text_pattern_ops, scd_valid_from" -unique true if {[::xo::db::require exists_table xolp_activity_dimension]} { @@ -173,11 +173,11 @@ } { Updates the activity in the xolp_activity_dimension table (without creating a new version). } { - ::xo::dc dml update_activity { - UPDATE xolp_activity_dimension - SET title = :title, scd_valid_from = current_timestamp - WHERE activity_version_id = :activity_version_id - } + ::xo::dc dml update_activity { + UPDATE xolp_activity_dimension + SET title = :title, scd_valid_from = current_timestamp + WHERE activity_version_id = :activity_version_id + } } ::xolp::Activity ad_proc update { @@ -235,7 +235,7 @@ Associate the activity with this context (e.g. the final test in a community). An activity can be associated to multiple contexts. Within each context, the activity has a relative weight (among the other activities - of this context). + of this context). In the standard case, the activities of a context have an equal share of the total weight. (E.g. when there are four activities 25% weight each). Of course, one can define differentiated weights. @@ -309,12 +309,12 @@ } { @return List of competency IRIs directly associated with this activity. } { - set sql " + set sql " SELECT DISTINCT competency_iri FROM xolp_activity_competency_bridge WHERE activity_iri = :activity_iri " - ::xo::dc list_of_lists dbqd..get_activity_competencies $sql + ::xo::dc list_of_lists dbqd..get_activity_competencies $sql } ::xolp::Activity ad_proc synchronize_competencies { @@ -341,16 +341,16 @@ # ::xolp::iri::MetaClass create ::xolp::ActivityVerb \ - -table_name xolp_activity_verb_dimension \ - -id_column activity_verb_id \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create description - } -ad_doc { - An activity verb may be referred to as "type of usage" of an activity object. - For example, a client application may want to differentiate between - "practicing" and "competing in" an exam. - } + -table_name xolp_activity_verb_dimension \ + -id_column activity_verb_id \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create description + } -ad_doc { + An activity verb may be referred to as "type of usage" of an activity object. + For example, a client application may want to differentiate between + "practicing" and "competing in" an exam. + } ::xolp::ActivityVerb require -iri "http://dotlrn.org/xolp/activity-verbs/unknown" @@ -359,9 +359,16 @@ # This could also be realized as simple column in the activity_dimension table. ::xolp::iri::MetaClass create ::xolp::ActivityType \ - -table_name xolp_activity_types \ - -id_column activity_type_id + -table_name xolp_activity_types \ + -id_column activity_type_id } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl,v diff -u -N -r1.7 -r1.8 --- openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl 12 Apr 2019 11:48:01 -0000 1.7 +++ openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl 12 Apr 2019 12:09:58 -0000 1.8 @@ -14,15 +14,15 @@ # ::xolp::iri::MetaClass create ::xolp::Competency \ - -table_name xolp_competency_dimension \ - -id_column competency_id \ - -slots { - ::xo::db::Attribute create title -datatype text - ::xo::db::Attribute create description -datatype text - } -ad_doc { - A competency is a demand-oriented human potentiality for action that can be learned - and involves cognitive and non-cognitive elements (see Stahl and Wild 2006). - } + -table_name xolp_competency_dimension \ + -id_column competency_id \ + -slots { + ::xo::db::Attribute create title -datatype text + ::xo::db::Attribute create description -datatype text + } -ad_doc { + A competency is a demand-oriented human potentiality for action that can be learned + and involves cognitive and non-cognitive elements (see Stahl and Wild 2006). + } ::xolp::Competency require -iri "http://dotlrn.org/xolp/competencies/unknown" @@ -161,11 +161,11 @@ } { @return List of competency IRIs attached to the given competency. } { - return [::xo::dc list get_competencies { - SELECT competency_iri - FROM xolp_competency_hierarchy_bridge - WHERE context_competency_iri = :competency_iri - }] + return [::xo::dc list get_competencies { + SELECT competency_iri + FROM xolp_competency_hierarchy_bridge + WHERE context_competency_iri = :competency_iri + }] } # @@ -225,3 +225,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-date-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-date-procs.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/xolp/tcl/xolp-date-procs.tcl 29 Jun 2018 17:27:19 -0000 1.2 +++ openacs-4/packages/xolp/tcl/xolp-date-procs.tcl 12 Apr 2019 12:09:58 -0000 1.3 @@ -105,3 +105,10 @@ } } + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl 12 Apr 2019 11:48:01 -0000 1.5 +++ openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl 12 Apr 2019 12:09:58 -0000 1.6 @@ -16,23 +16,23 @@ # ::xolp::iri::MetaClass create ::xolp::EvaluationSchema \ - -table_name xolp_evalschemas \ - -id_column evalschema_id \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create description - ::xo::db::Attribute create level_names - ::xo::db::Attribute create positive_threshold_index \ - -default 0 \ - -datatype integer - } -ad_doc { - An evaluation schema is used for translating - raw (percentage) scores into meaningful levels, - e.g. grades. - } + -table_name xolp_evalschemas \ + -id_column evalschema_id \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create description + ::xo::db::Attribute create level_names + ::xo::db::Attribute create positive_threshold_index \ + -default 0 \ + -datatype integer + } -ad_doc { + An evaluation schema is used for translating + raw (percentage) scores into meaningful levels, + e.g. grades. + } ::xolp::EvaluationSchema ad_proc new_persistent_object {args} { - Create new persistent object + Create new persistent object } { array set argsarray $args if {[llength [array get argsarray "-level_names"]] > 0 @@ -44,18 +44,18 @@ } ::xolp::iri::MetaClass create ::xolp::EvaluationScale \ - -table_name xolp_evalscales \ - -id_column evalscale_id \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create evalschema_id \ - -datatype integer \ - -references "xolp_evalschemas" - ::xo::db::Attribute create thresholds - } -ad_doc { - An evaluation scale carries the actual thresholds - for dividing the range from 0 to 100 into levels. - } + -table_name xolp_evalscales \ + -id_column evalscale_id \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create evalschema_id \ + -datatype integer \ + -references "xolp_evalschemas" + ::xo::db::Attribute create thresholds + } -ad_doc { + An evaluation scale carries the actual thresholds + for dividing the range from 0 to 100 into levels. + } ::xo::db::require table xolp_evalscale_activity_bridge { evalscale_id {INTEGER NOT NULL REFERENCES xolp_evalscales ON DELETE CASCADE} @@ -83,7 +83,7 @@ } ::xolp::EvaluationScale ad_instproc initialize_loaded_object {} { - Initialize loaded object + Initialize loaded object } { :levels } @@ -166,20 +166,20 @@ set ticks [list 0 {*}${:thresholds} 100] for {set i 0} {$i < [llength $ticks]-1} {incr i} { lappend levels [::xolp::EvaluationScale::Level create [self]::$i \ - -min [lindex $ticks $i] \ - -max [lindex $ticks $i+1]] + -min [lindex $ticks $i] \ + -max [lindex $ticks $i+1]] } return $levels } ::xotcl::Class create ::xolp::EvaluationScale::Level \ - -parameter { - min:required - max:required - } -ad_doc { - @param min Lower boundary (inklusive) - @param max Upper boundary (exklusive for all but highest level) - } + -parameter { + min:required + max:required + } -ad_doc { + @param min Lower boundary (inklusive) + @param max Upper boundary (exklusive for all but highest level) + } ::xolp::EvaluationScale::Level ad_instproc name { } { @@ -244,3 +244,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl,v diff -u -N -r1.9 -r1.10 --- openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl 12 Apr 2019 11:48:01 -0000 1.9 +++ openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl 12 Apr 2019 12:09:58 -0000 1.10 @@ -17,30 +17,30 @@ # Indicators # ::xotcl::Class create ::xolp::Indicator \ - -parameter { - indicator_id - user_id - activity_verb_id - activity_version_id - competency_set_id - begin_timestamp - begin_date_id - begin_time_id - end_timestamp - end_date_id - end_time_id - storage_timestamp - storage_date_id - storage_time_id - result_numerator - result_denominator - } \ - -ad_doc { - Primary Fact Table Abstraction - } + -parameter { + indicator_id + user_id + activity_verb_id + activity_version_id + competency_set_id + begin_timestamp + begin_date_id + begin_time_id + end_timestamp + end_date_id + end_time_id + storage_timestamp + storage_date_id + storage_time_id + result_numerator + result_denominator + } \ + -ad_doc { + Primary Fact Table Abstraction + } ::xolp::Indicator ad_proc essential_attributes {} { - Return essential attributes + Return essential attributes } { set attributes [::xolp::util::lremove [:info parameter] { indicator_id begin_date_id end_date_id begin_time_id end_time_id storage_date_id storage_time_id @@ -49,7 +49,7 @@ } ::xolp::Indicator ad_instproc init args { - Init class + Init class } { next :destroy_on_cleanup @@ -97,15 +97,15 @@ ::xo::dc dml create-trigger { CREATE OR REPLACE FUNCTION xolp_indicator_upsert_tr() RETURNS trigger AS ' - BEGIN - NEW.begin_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.begin_timestamp::date); - NEW.begin_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.begin_timestamp::time,''HH24:MI'')::time); - NEW.end_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.end_timestamp::date); - NEW.end_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.end_timestamp::time,''HH24:MI'')::time); - NEW.storage_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.storage_timestamp::date); - NEW.storage_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.storage_timestamp::time,''HH24:MI'')::time); - RETURN NEW; - END; + BEGIN + NEW.begin_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.begin_timestamp::date); + NEW.begin_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.begin_timestamp::time,''HH24:MI'')::time); + NEW.end_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.end_timestamp::date); + NEW.end_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.end_timestamp::time,''HH24:MI'')::time); + NEW.storage_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.storage_timestamp::date); + NEW.storage_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.storage_timestamp::time,''HH24:MI'')::time); + RETURN NEW; + END; ' LANGUAGE plpgsql; DROP TRIGGER IF EXISTS xolp_indicator_upsert_tr ON xolp_indicator_facts; CREATE TRIGGER xolp_indicator_upsert_tr BEFORE INSERT OR UPDATE ON xolp_indicator_facts FOR EACH ROW EXECUTE PROCEDURE xolp_indicator_upsert_tr(); @@ -114,7 +114,7 @@ ::xolp::Indicator ad_proc exists_in_db { {-indicator_id:required} } { - Checks for objects existance in the database + Checks for objects existance in the database } { ::xo::dc get_value select_object {select 1 from xolp_indicator_facts where indicator_id = :indicator_id} 0 } @@ -124,7 +124,7 @@ {-user_ids ""} {-activity_version_ids ""} } { - Delete object + Delete object } { if {$indicator_id ne ""} { ::xo::dc dml delete {DELETE FROM xolp_indicator_facts WHERE indicator_id = :indicator_id} @@ -311,17 +311,17 @@ @param begin_timestamp The timestamp at which the (learning) activity began (default: equal to end_timestamp) @param end_timestamp The timestamp at which the (learning) activity ended @param return Specify kind of return value. The default will return nothing and is the fastest. - Further valid values are "id" (returns the newly created indicator_id) - and "object", which returns an initialized instance object of type Indicator. + Further valid values are "id" (returns the newly created indicator_id) + and "object", which returns an initialized instance object of type Indicator. } { if {$user_id eq ""} { set user_id [ad_conn user_id] } if {$activity_version_id eq ""} { set activity_version_id [::xolp::Activity require \ - -iri [ad_url][ad_conn url] \ - -update false \ - -return id] + -iri [ad_url][ad_conn url] \ + -update false \ + -return id] } set storage_timestamp [dt_systime] if {$end_timestamp eq ""} { @@ -332,8 +332,8 @@ } if {$activity_verb_id eq ""} { set activity_verb [::xolp::ActivityVerb require \ - -iri "http://dotlrn.org/xolp/activity-verbs/unknown" \ - -update false] + -iri "http://dotlrn.org/xolp/activity-verbs/unknown" \ + -update false] set activity_verb_id [$activity_verb set activity_verb_id] } set attributes [:essential_attributes] @@ -361,7 +361,7 @@ } ::xolp::Indicator ad_instproc save {} { - Save object + Save object } { set attributes [[:info class] essential_attributes] :instvar indicator_id {*}$attributes @@ -380,24 +380,31 @@ ::xo::db::require view xolp_indicators_activities_view { SELECT - facts.user_id, - v.iri AS activity_verb_iri, - a.iri AS activity_iri, - facts.begin_timestamp, - facts.end_timestamp, - age(facts.end_timestamp, facts.begin_timestamp) AS duration, - facts.result_numerator, - facts.result_denominator, - (result_numerator::numeric / result_denominator::numeric) * 100 AS result_percentage + facts.user_id, + v.iri AS activity_verb_iri, + a.iri AS activity_iri, + facts.begin_timestamp, + facts.end_timestamp, + age(facts.end_timestamp, facts.begin_timestamp) AS duration, + facts.result_numerator, + facts.result_denominator, + (result_numerator::numeric / result_denominator::numeric) * 100 AS result_percentage FROM - xolp_indicator_facts facts + xolp_indicator_facts facts INNER JOIN - xolp_activity_dimension a USING (activity_version_id) + xolp_activity_dimension a USING (activity_version_id) INNER JOIN - xolp_activity_verb_dimension v USING (activity_verb_id) + xolp_activity_verb_dimension v USING (activity_verb_id) } } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl 12 Apr 2019 11:48:01 -0000 1.3 +++ openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl 12 Apr 2019 12:09:58 -0000 1.4 @@ -9,13 +9,13 @@ namespace eval ::xolp::iri { ::xotcl::Class create ::xolp::iri::MetaClass \ - -superclass ::xo::db::Class \ - -parameter { - {iri_unique true} - } -ad_doc { - This meta class provides generic methods for the - application classes (such as ::xolp::Activity). - } + -superclass ::xo::db::Class \ + -parameter { + {iri_unique true} + } -ad_doc { + This meta class provides generic methods for the + application classes (such as ::xolp::Activity). + } ::xolp::iri::MetaClass ad_instproc init {args} { Initializes the application class with an iri attribute and @@ -26,7 +26,7 @@ ::xo::db::Attribute create iri } next - if {[::xo::db::require exists_table ${:table_name}]} { + if {[::xo::db::require exists_table ${:table_name}]} { :log "Requiring unique index for ${:table_name}.iri" ::xo::db::require index -table ${:table_name} -col "iri" -unique ${:iri_unique} } @@ -52,8 +52,8 @@ Require (create or update) an object for this IRI. @param update Whether or not to update an existing object with the provided values. @param return Specify kind of return value. The default will return nothing and is the fastest. - Further valid values are "id" (returns the newly created indicator_id) - and "object", which returns an initialized instance object of type Indicator. + Further valid values are "id" (returns the newly created indicator_id) + and "object", which returns an initialized instance object of type Indicator. @return Returns an id or an instantiated object. } { set object_ids [:get_object_ids -iri $iri] @@ -89,3 +89,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/xolp/tcl/xolp-procs.tcl 29 Jun 2018 17:27:19 -0000 1.3 +++ openacs-4/packages/xolp/tcl/xolp-procs.tcl 12 Apr 2019 12:09:58 -0000 1.4 @@ -182,3 +182,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-time-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-time-procs.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/xolp/tcl/xolp-time-procs.tcl 29 Jun 2018 17:27:19 -0000 1.2 +++ openacs-4/packages/xolp/tcl/xolp-time-procs.tcl 12 Apr 2019 12:09:58 -0000 1.3 @@ -90,3 +90,10 @@ } } + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-user-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-user-procs.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xolp/tcl/xolp-user-procs.tcl 12 Apr 2019 11:48:01 -0000 1.5 +++ openacs-4/packages/xolp/tcl/xolp-user-procs.tcl 12 Apr 2019 12:09:58 -0000 1.6 @@ -45,27 +45,27 @@ {-policy "best"} {-null_as_zero false} } { - Get evaluation + Get evaluation } { set activity_version_id [lindex [::xolp::Activity get_object_ids -iri $iri] 0] set evalscale [::xolp::EvaluationScale get_evalscales_from_activity_version_id -activity_version_id $activity_version_id] if {$evalscale eq ""} { error "There is no evaluation scale associated with context '$iri'." } set result [:get_result \ - -format "%s" \ - -user_id $user_id \ - -context_iri $context_iri \ - -iri $iri \ - -policy $policy \ - -null_as_zero $null_as_zero] + -format "%s" \ + -user_id $user_id \ + -context_iri $context_iri \ + -iri $iri \ + -policy $policy \ + -null_as_zero $null_as_zero] if {$result eq ""} { error "There is no result for user '$user_id' and activity '$iri' in context '$context_iri'.\n Depending on the context, you may want to use parameter null_as_zero to handle this." } set evaluated_results [::xolp::Evaluator evaluate \ - -results $result \ - -evalscales $evalscale] + -results $result \ + -evalscales $evalscale] set evaluation [dict get $evaluated_results $result $evalscale] return $evaluation } @@ -101,18 +101,18 @@ # FROM xolp_competency_dimension INNER JOIN competencies USING (competency_id) # " set sql { - SELECT iri, xolp_weighted_competency_result(:user_id,iri,:agg) - from ( - select distinct cd.iri - from xolp_competency_dimension cd, - xolp_activity_competency_bridge acb, - xolp_activity_dimension ad, - xolp_indicator_facts if - where cd.iri = acb.competency_iri - and acb.activity_iri = ad.iri - and ad.activity_version_id = if.activity_version_id - and if.user_id = :user_id - ) as competencies + SELECT iri, xolp_weighted_competency_result(:user_id,iri,:agg) + from ( + select distinct cd.iri + from xolp_competency_dimension cd, + xolp_activity_competency_bridge acb, + xolp_activity_dimension ad, + xolp_indicator_facts if + where cd.iri = acb.competency_iri + and acb.activity_iri = ad.iri + and ad.activity_version_id = if.activity_version_id + and if.user_id = :user_id + ) as competencies } set competencies [::xo::dc list_of_lists get_competencies $sql] set result_dict "" @@ -168,7 +168,7 @@ {-format "%.2f"} {-null_as_zero false} } { - Get competency result + Get competency result } { set agg [string map -nocase {best max worst min average avg} $policy] if {$agg ni "min max avg"} {error "Unknown policy."} @@ -185,26 +185,33 @@ {-format "%.2f"} {-null_as_zero false} } { - Get competency evaluation + Get competency evaluation } { set result [:get_competency_result \ - -format "%s" \ - -user_id $user_id \ - -competency_iri $competency_iri \ - -policy $policy \ - -null_as_zero $null_as_zero] + -format "%s" \ + -user_id $user_id \ + -competency_iri $competency_iri \ + -policy $policy \ + -null_as_zero $null_as_zero] if {$result eq ""} { error "There is no result for user '$user_id' and competency '$competency_iri'." } set evalscale [::xolp::EvaluationScale get_evalscales_from_competency_iri \ - -competency_iri $competency_iri] + -competency_iri $competency_iri] set evaluated_results [::xolp::Evaluator evaluate \ - -results $result \ - -evalscales $evalscale] + -results $result \ + -evalscales $evalscale] set evaluation [dict get $evaluated_results $result $evalscale] return $evaluation } } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-util-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-util-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/xolp/tcl/xolp-util-procs.tcl 11 Apr 2019 11:32:04 -0000 1.3 +++ openacs-4/packages/xolp/tcl/xolp-util-procs.tcl 12 Apr 2019 12:09:58 -0000 1.4 @@ -106,21 +106,28 @@ ad_proc random_earlier_timestamp {ts} { Simple function to generate from an end_timestamp a "random" begin_timestamp, - which is within sensible boundaries. + which is within sensible boundaries. } { - set ts [clock scan $ts -format "%Y-%m-%d %T z" -timezone :UTC] - clock format [clock add $ts -[expr {int(rand()*180)}] minute] -format "%Y-%m-%d %T z" -timezone :UTC + set ts [clock scan $ts -format "%Y-%m-%d %T z" -timezone :UTC] + clock format [clock add $ts -[expr {int(rand()*180)}] minute] -format "%Y-%m-%d %T z" -timezone :UTC } ad_proc -private get_testcase_for_documentation {-case:required {-index 3}} { } { - package require textutil - foreach t [nsv_get aa_test cases] { - lassign $t id desc file pkg cats inits err body _ - if {$id eq $case && $pkg eq "xolp"} { - return "
[regsub "\n\n" [textutil::undent [lindex $body 0 $index]] ""]
" - } + package require textutil + foreach t [nsv_get aa_test cases] { + lassign $t id desc file pkg cats inits err body _ + if {$id eq $case && $pkg eq "xolp"} { + return "
[regsub "\n\n" [textutil::undent [lindex $body 0 $index]] ""]
" } + } } -} + } + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl,v diff -u -N -r1.13 -r1.14 --- openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl 12 Apr 2019 11:15:36 -0000 1.13 +++ openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl 12 Apr 2019 12:09:58 -0000 1.14 @@ -1,8 +1,8 @@ ad_library { - Regression test suite + Regression test suite - @author Michael Aram - @creation-date 2017 + @author Michael Aram + @creation-date 2017 } @@ -21,9 +21,9 @@ "Create an Activity Verb" { aa_export_vars {activity_verb} set activity_verb [::xolp::ActivityVerb new_persistent_object \ - -iri "https://example.com/verb/perform" \ - -title [ad_generate_random_string] \ - -description [ad_generate_random_string]] + -iri "https://example.com/verb/perform" \ + -title [ad_generate_random_string] \ + -description [ad_generate_random_string]] set activity_verb_id [$activity_verb object_id] $activity_verb destroy set activity_verb [::xo::db::Class get_instance_from_db -id $activity_verb_id] @@ -41,9 +41,9 @@ "Require an Activity Verb" { aa_export_vars {activity_verb} set activity_verb [::xolp::ActivityVerb require \ - -iri "http://adlnet.gov/expapi/verbs/experienced" \ - -title "Ooops" \ - -description [ad_generate_random_string]] + -iri "http://adlnet.gov/expapi/verbs/experienced" \ + -title "Ooops" \ + -description [ad_generate_random_string]] aa_log "ActivityVerb ID: [$activity_verb set object_id]" aa_true "Requiring the standard activity verb succeeded" { @@ -55,9 +55,9 @@ set title [ad_generate_random_string] set activity_verb [::xolp::ActivityVerb require \ - -iri "http://adlnet.gov/expapi/verbs/experienced" \ - -title $title \ - -description [ad_generate_random_string]] + -iri "http://adlnet.gov/expapi/verbs/experienced" \ + -title $title \ + -description [ad_generate_random_string]] aa_log "ActivityVerb ID: [$activity_verb set object_id]" aa_true "Requiring the standard activity verb (with fixed typos) succeeded" { [info exists activity_verb] @@ -96,22 +96,22 @@ "Create an Evaluation Schema" { aa_export_vars {evaluation_schema} catch {::xolp::EvaluationSchema new_persistent_object \ - -iri "https://example.com/xyz" \ - -title [ad_generate_random_string] \ - -description [ad_generate_random_string] \ - -level_names {x y z} \ - -positive_threshold_index 2} catch_result + -iri "https://example.com/xyz" \ + -title [ad_generate_random_string] \ + -description [ad_generate_random_string] \ + -level_names {x y z} \ + -positive_threshold_index 2} catch_result aa_log $catch_result aa_true "Requiring a schema with a bad positive_threshold_index errored as expected" { [string match "*positive_threshold_index must refer*" $catch_result] } set evaluation_schema [::xolp::EvaluationSchema new_persistent_object \ - -iri "https://example.com/abcd" \ - -title [ad_generate_random_string] \ - -description [ad_generate_random_string] \ - -level_names {a b c d} \ - -positive_threshold_index 1] + -iri "https://example.com/abcd" \ + -title [ad_generate_random_string] \ + -description [ad_generate_random_string] \ + -level_names {a b c d} \ + -positive_threshold_index 1] set evaluation_schema_id [$evaluation_schema object_id] $evaluation_schema destroy set evaluation_schema [::xo::db::Class get_instance_from_db -id $evaluation_schema_id] @@ -130,11 +130,11 @@ "Require an Evaluation Schema" { aa_export_vars {evaluation_schema} set evaluation_schema [::xolp::EvaluationSchema require \ - -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \ - -title "Ooops" \ - -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \ - -level_names {five four three two one} \ - -positive_threshold_index 0] + -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \ + -title "Ooops" \ + -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \ + -level_names {five four three two one} \ + -positive_threshold_index 0] aa_log "EvaluationSchema ID: [$evaluation_schema set object_id]" aa_true "Requiring the standard evaluation schema succeeded" { @@ -145,11 +145,11 @@ } set evaluation_schema [::xolp::EvaluationSchema require \ - -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \ - -title "5 to 1" \ - -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \ - -level_names {five four three two one} \ - -positive_threshold_index 0] + -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \ + -title "5 to 1" \ + -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \ + -level_names {five four three two one} \ + -positive_threshold_index 0] aa_log "EvaluationSchema ID: [$evaluation_schema set object_id]" aa_true "Requiring the standard evaluation schema (with fixed typos) succeeded" { [info exists evaluation_schema] @@ -189,9 +189,9 @@ aa_export_vars {evaluation_schema evaluation_scale} set evaluation_scale_title "Test Evaluation Scale 60-70-80-90" set evaluation_scale [::xolp::EvaluationScale new_persistent_object \ - -title $evaluation_scale_title \ - -evalschema_id [$evaluation_schema object_id] \ - -thresholds "60 70 80 90"] + -title $evaluation_scale_title \ + -evalschema_id [$evaluation_schema object_id] \ + -thresholds "60 70 80 90"] aa_true "Persisting a new evaluation scale succeeded" { [info exists evaluation_scale] && [::xotcl::Object isobject $evaluation_scale] @@ -209,9 +209,9 @@ aa_export_vars {evaluation_schema evaluation_scale} set evaluation_scale_title "Test Evaluation Scale Bad/Good" set evaluation_scale [::xolp::EvaluationScale require \ - -iri "http://example.com/" \ - -title "Ooops" \ - -thresholds "1 99"] + -iri "http://example.com/" \ + -title "Ooops" \ + -thresholds "1 99"] aa_true "Persisting a new evaluation scale succeeded" { [info exists evaluation_scale] && [::xotcl::Object isobject $evaluation_scale] @@ -223,9 +223,9 @@ aa_log "evaluation_scale ID: [$evaluation_scale set object_id]" set evaluation_scale [::xolp::EvaluationScale require \ - -iri "http://example.com/" \ - -title $evaluation_scale_title \ - -thresholds "50"] + -iri "http://example.com/" \ + -title $evaluation_scale_title \ + -thresholds "50"] aa_true "Persisting a new evaluation scale succeeded" { [info exists evaluation_scale] && [::xotcl::Object isobject $evaluation_scale] @@ -269,7 +269,7 @@ set iri "http://example.com/a1" set activity_title "Test Activity" set activity [::xolp::Activity new_persistent_object \ - -iri $iri -title "Oopsy.."] + -iri $iri -title "Oopsy.."] set object_id [$activity object_id] $activity destroy ::xo::db::Class get_instance_from_db -id $object_id @@ -287,8 +287,8 @@ aa_export_vars {iri} set new_title "New Title [ad_generate_random_string]" set activity [::xolp::Activity update \ - -iri $iri \ - -title $new_title] + -iri $iri \ + -title $new_title] aa_log "Newly inserted Activity Dimension row: $activity" aa_true "Persisting a new Activity succeeded" { [info exists activity] @@ -306,7 +306,7 @@ aa_export_vars {activity} set activity_title "Test Activity" set activity [::xolp::Activity require \ - -iri "http://example.com/a1" -title "Oopsi.."] + -iri "http://example.com/a1" -title "Oopsi.."] aa_true "Persisting a new Activity succeeded" { [info exists activity] && [::xotcl::Object isobject $activity] @@ -317,8 +317,8 @@ $activity destroy set activity [::xolp::Activity require \ - -iri "http://example.com/a1" \ - -title $activity_title] + -iri "http://example.com/a1" \ + -title $activity_title] aa_true "Persisting a new Activity succeeded" { [info exists activity] && [::xotcl::Object isobject $activity] @@ -373,14 +373,14 @@ set activity_version_id [$activity activity_version_id] set result_numerator [format "%.0f" [expr {[random] * 100}]] set indicator [::xolp::Indicator insert \ - -user_id [ad_conn user_id] \ - -activity_version_id $activity_version_id \ - -begin_timestamp "2014-01-01 00:00:00" \ - -end_timestamp "2014-01-03 00:00:00" \ - -result_numerator $result_numerator \ - -competency_set_id 1 \ - -result_denominator 1000 \ - -return object] + -user_id [ad_conn user_id] \ + -activity_version_id $activity_version_id \ + -begin_timestamp "2014-01-01 00:00:00" \ + -end_timestamp "2014-01-03 00:00:00" \ + -result_numerator $result_numerator \ + -competency_set_id 1 \ + -result_denominator 1000 \ + -return object] aa_true "Persisting a new indicator succeeded" { [$indicator activity_version_id] eq $activity_version_id && [$indicator user_id] eq [ad_conn user_id] @@ -420,7 +420,7 @@ $indicator destroy set indicator [::xolp::Indicator get_instance_from_db \ - -indicator_id $indicator_id] + -indicator_id $indicator_id] $indicator user_id 0; # Anonymous $indicator begin_timestamp 2013-01-01 $indicator end_timestamp 2013-01-04 @@ -472,15 +472,15 @@ lassign $activity_iris a1 a2 a3 set data [list \ - $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 10:00:00" 30 90 \ - $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 11:00:00" 60 90 \ - $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 08:15:00" "2016-10-02 09:00:00" 1 1 \ - $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 09:30:00" "2016-10-02 10:00:00" 9000 18000 \ - $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-01 09:00:00" "2016-11-01 10:00:00" 23 100 \ - $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-02 11:15:00" "2016-11-02 12:00:00" 22 100 \ - $u1 $c1 $a3 "xolp:test:v:competed" "2016-10-03 09:45:00" "2016-10-03 10:00:00" 0 100 \ - $u2 $c2 $a3 "xolp:test:v:competed" "2016-10-04 13:00:00" "2016-10-04 14:00:00" 87 100 \ - ] + $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 10:00:00" 30 90 \ + $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 11:00:00" 60 90 \ + $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 08:15:00" "2016-10-02 09:00:00" 1 1 \ + $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 09:30:00" "2016-10-02 10:00:00" 9000 18000 \ + $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-01 09:00:00" "2016-11-01 10:00:00" 23 100 \ + $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-02 11:15:00" "2016-11-02 12:00:00" 22 100 \ + $u1 $c1 $a3 "xolp:test:v:competed" "2016-10-03 09:45:00" "2016-10-03 10:00:00" 0 100 \ + $u2 $c2 $a3 "xolp:test:v:competed" "2016-10-04 13:00:00" "2016-10-04 14:00:00" 87 100 \ + ] foreach {user_id context_iri activity_iri verb_iri begin_timestamp end_timestamp rn rd} $data { ::xolp::Activity require -update false -iri $context_iri @@ -490,17 +490,17 @@ set verb [::xolp::ActivityVerb require -update false -iri $verb_iri] set activity_verb_id [$verb activity_verb_id] ::xolp::Indicator insert \ - -user_id $user_id \ - -activity_verb_id $activity_verb_id \ - -activity_version_id $activity_version_id \ - -begin_timestamp $begin_timestamp \ - -end_timestamp $end_timestamp \ - -result_numerator $rn \ - -result_denominator $rd + -user_id $user_id \ + -activity_verb_id $activity_verb_id \ + -activity_version_id $activity_version_id \ + -begin_timestamp $begin_timestamp \ + -end_timestamp $end_timestamp \ + -result_numerator $rn \ + -result_denominator $rd } } { - foreach u $test_user_ids {acs_user::delete -user_id $u -permanent} - foreach a $activity_iris {::xolp::Activity delete -iri $a} + foreach u $test_user_ids {acs_user::delete -user_id $u -permanent} + foreach a $activity_iris {::xolp::Activity delete -iri $a} } aa_register_init_class \ @@ -519,74 +519,74 @@ ::xolp::Competency require -iri "http://example.com/competencies/programming/tcl" ::xolp::Competency add_to_competency \ - -competency_iri "http://example.com/competencies/computational-thinking" \ - -context_competency_iri "http://example.com/competencies/abstract-thinking" \ - -weight_numerator 6 \ - -weight_denominator 10 \ - -check false + -competency_iri "http://example.com/competencies/computational-thinking" \ + -context_competency_iri "http://example.com/competencies/abstract-thinking" \ + -weight_numerator 6 \ + -weight_denominator 10 \ + -check false # Fullstack Webdevelopment books up to SW-Dev and Computational Thinking ::xolp::Competency add_to_competency \ - -competency_iri "http://example.com/competencies/fullstack-webdev" \ - -context_competency_iri "http://example.com/competencies/software-development" \ - -weight_numerator 50 \ - -weight_denominator 100 \ - -check false + -competency_iri "http://example.com/competencies/fullstack-webdev" \ + -context_competency_iri "http://example.com/competencies/software-development" \ + -weight_numerator 50 \ + -weight_denominator 100 \ + -check false ::xolp::Competency add_to_competency \ - -competency_iri "http://example.com/competencies/fullstack-webdev" \ - -context_competency_iri "http://example.com/competencies/computational-thinking" \ - -weight_numerator 75 \ - -weight_denominator 100 \ - -check false + -competency_iri "http://example.com/competencies/fullstack-webdev" \ + -context_competency_iri "http://example.com/competencies/computational-thinking" \ + -weight_numerator 75 \ + -weight_denominator 100 \ + -check false # Fullstack Webdevelopment is itself a compound competency ::xolp::Competency add_to_competency \ - -competency_iri "http://example.com/competencies/programming/tcl" \ - -context_competency_iri "http://example.com/competencies/fullstack-webdev" \ - -weight_numerator 10 \ - -weight_denominator 40 \ - -check false + -competency_iri "http://example.com/competencies/programming/tcl" \ + -context_competency_iri "http://example.com/competencies/fullstack-webdev" \ + -weight_numerator 10 \ + -weight_denominator 40 \ + -check false ::xolp::Competency add_to_competency \ - -competency_iri "http://example.com/competencies/database-design" \ - -context_competency_iri "http://example.com/competencies/fullstack-webdev" \ - -weight_numerator 1 \ - -weight_denominator 4 \ - -check false + -competency_iri "http://example.com/competencies/database-design" \ + -context_competency_iri "http://example.com/competencies/fullstack-webdev" \ + -weight_numerator 1 \ + -weight_denominator 4 \ + -check false # This simple Tcl exam can proof only that you know Tcl a bit (33.3%, lets say) ::xolp::Activity add_to_competency \ - -activity_iri "http://example.com/tcl-exam" \ - -competency_iri "http://example.com/competencies/programming/tcl" \ - -charge_numerator 3 \ - -charge_denominator 9 + -activity_iri "http://example.com/tcl-exam" \ + -competency_iri "http://example.com/competencies/programming/tcl" \ + -charge_numerator 3 \ + -charge_denominator 9 # If you can handle OpenACS, however, you end up nearly as Tcl ninja (90%, lets say) ::xolp::Activity add_to_competency \ - -activity_iri "http://example.com/openacs-exam" \ - -competency_iri "http://example.com/competencies/programming/tcl" \ - -charge_numerator 90 + -activity_iri "http://example.com/openacs-exam" \ + -competency_iri "http://example.com/competencies/programming/tcl" \ + -charge_numerator 90 # Moreover, you probably know a bit of database design as well (50%) ::xolp::Activity add_to_competency \ - -activity_iri "http://example.com/openacs-exam" \ - -competency_iri "http://example.com/competencies/database-design" \ - -charge_numerator 50 + -activity_iri "http://example.com/openacs-exam" \ + -competency_iri "http://example.com/competencies/database-design" \ + -charge_numerator 50 ::xolp::Activity synchronize_competencies -activity_iri "http://example.com/tcl-exam" ::xolp::Activity synchronize_competencies -activity_iri "http://example.com/openacs-exam" set evaluation_schema_id [::xolp::EvaluationSchema require \ - -iri "http://example.com/evaluation-schemas/programming" \ - -return id \ - -title "Development Skills" \ - -level_names {"luser" "junior" "senior" "ninja"} \ - -positive_threshold_index 1] + -iri "http://example.com/evaluation-schemas/programming" \ + -return id \ + -title "Development Skills" \ + -level_names {"luser" "junior" "senior" "ninja"} \ + -positive_threshold_index 1] set evaluation_scale [::xolp::EvaluationScale require \ - -iri "http://example.com/evaluation-scales/programming" \ - -evalschema_id $evaluation_schema_id \ - -title "luser - 25 - junior - 50 - senior - 75 - ninja" \ - -thresholds { 25 50 75 }] + -iri "http://example.com/evaluation-scales/programming" \ + -evalschema_id $evaluation_schema_id \ + -title "luser - 25 - junior - 50 - senior - 75 - ninja" \ + -thresholds { 25 50 75 }] $evaluation_scale add_to_competency \ -competency_iri "http://example.com/competencies/programming/tcl" @@ -601,7 +601,7 @@ $evaluation_scale add_to_competency \ -competency_iri "http://example.com/competencies/abstract-thinking" } { - # Delete stuff + # Delete stuff } ################## @@ -614,608 +614,608 @@ -procs {::xolp::ActivityVerb} \ -cats {smoke} \ activity_verb_create { - Create an Activity Verb. + Create an Activity Verb. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_verb_create - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_verb_create + } } aa_register_case \ -procs {::xolp::ActivityVerb} \ -cats {smoke} \ activity_verb_require { - Require an Activity Verb. + Require an Activity Verb. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_verb_require - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_verb_require + } } aa_register_case \ -procs {::xolp::EvaluationSchema} \ -cats {smoke} \ activity_verb_delete { - Delete an Activity Verb. + Delete an Activity Verb. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_verb_create - aa_call_component activity_verb_delete - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_verb_create + aa_call_component activity_verb_delete + } } aa_register_case \ -procs {::xolp::EvaluationSchema} \ -cats {smoke} \ evaluation_schema_create { - Create an Evaluation Schema. + Create an Evaluation Schema. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_schema_create - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_schema_create + } } aa_register_case \ -procs {::xolp::EvaluationSchema} \ -cats {smoke} \ evaluation_schema_require { - Require an Evaluation Schema. + Require an Evaluation Schema. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_schema_require - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_schema_require + } } aa_register_case \ -procs {::xolp::EvaluationSchema} \ -cats {smoke} \ evaluation_schema_delete { - Delete an Evaluation Schema. + Delete an Evaluation Schema. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_schema_create - aa_call_component evaluation_schema_delete - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_schema_create + aa_call_component evaluation_schema_delete + } } aa_register_case \ -procs {::xolp::EvaluationScale} \ -cats {smoke} \ evaluation_scale_create { - Create an Evaluation Scale. + Create an Evaluation Scale. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_schema_create - aa_call_component evaluation_scale_create - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_schema_create + aa_call_component evaluation_scale_create + } } aa_register_case \ -procs {::xolp::EvaluationScale} \ -cats {smoke} \ evaluation_scale_require { - Require an Evaluation Scale. + Require an Evaluation Scale. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_scale_require - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_scale_require + } } aa_register_case \ -procs {::xolp::EvaluationScale} \ -cats {smoke} \ evaluation_scale_delete { - Delete an Evaluation Scale. + Delete an Evaluation Scale. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_schema_create - aa_call_component evaluation_scale_create - aa_call_component evaluation_scale_delete - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_schema_create + aa_call_component evaluation_scale_create + aa_call_component evaluation_scale_delete + } } aa_register_case \ -procs {::xolp::EvaluationScale} \ -cats {api} \ evaluation_scale_levels { - Correctness of Levels of an Evaluation Scale. + Correctness of Levels of an Evaluation Scale. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component evaluation_schema_create - aa_call_component evaluation_scale_create + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component evaluation_schema_create + aa_call_component evaluation_scale_create - set levels [$evaluation_scale levels] - set lowest_level [lindex $levels 0] - set highest_level [lindex $levels end] - set medium_level [$evaluation_scale get_level -result 75] - aa_equals "5 levels?" [llength $levels] 5 - aa_equals "Lowest level min 0?" [$lowest_level min] 0 - aa_equals "Lowest level max 60?" [$lowest_level max] 60 - aa_equals "Lowest level height 0?" [$lowest_level height] 0 - aa_equals "Medium level min 70?" [$medium_level min] 70 - aa_equals "Medium level max 80?" [$medium_level max] 80 - aa_equals "Medium level height 2?" [$medium_level height] 2 - aa_equals "Highest level min 90?" [$highest_level min] 90 - aa_equals "Highest level max 100?" [$highest_level max] 100 - aa_equals "Highest level height 4?" [$highest_level height] 4 + set levels [$evaluation_scale levels] + set lowest_level [lindex $levels 0] + set highest_level [lindex $levels end] + set medium_level [$evaluation_scale get_level -result 75] + aa_equals "5 levels?" [llength $levels] 5 + aa_equals "Lowest level min 0?" [$lowest_level min] 0 + aa_equals "Lowest level max 60?" [$lowest_level max] 60 + aa_equals "Lowest level height 0?" [$lowest_level height] 0 + aa_equals "Medium level min 70?" [$medium_level min] 70 + aa_equals "Medium level max 80?" [$medium_level max] 80 + aa_equals "Medium level height 2?" [$medium_level height] 2 + aa_equals "Highest level min 90?" [$highest_level min] 90 + aa_equals "Highest level max 100?" [$highest_level max] 100 + aa_equals "Highest level height 4?" [$highest_level height] 4 - aa_true "Is 0 negative?" {[$lowest_level encompasses -result 0]} - aa_true "Is 59.9 negative?" {[$lowest_level encompasses -result 59.9]} - aa_true "Is 70 satisfactory?" {[$medium_level encompasses -result 70]} - aa_true "Is 75 satisfactory?" {[$medium_level encompasses -result 75]} - aa_false "Is 80 better than satisfactory?" {[$medium_level encompasses -result 80]} - aa_true "Is 90 excellent?" {[$highest_level encompasses -result 90]} - aa_true "Is 100 excellent?" {[$highest_level encompasses -result 100]} - aa_false "Is 101 invalid?" {[$highest_level encompasses -result 100.1]} - } + aa_true "Is 0 negative?" {[$lowest_level encompasses -result 0]} + aa_true "Is 59.9 negative?" {[$lowest_level encompasses -result 59.9]} + aa_true "Is 70 satisfactory?" {[$medium_level encompasses -result 70]} + aa_true "Is 75 satisfactory?" {[$medium_level encompasses -result 75]} + aa_false "Is 80 better than satisfactory?" {[$medium_level encompasses -result 80]} + aa_true "Is 90 excellent?" {[$highest_level encompasses -result 90]} + aa_true "Is 100 excellent?" {[$highest_level encompasses -result 100]} + aa_false "Is 101 invalid?" {[$highest_level encompasses -result 100.1]} + } } aa_register_case \ -procs {::xolp::Activity} \ -cats {smoke} \ activity_create { - Register an activity for the first time in the activity dimension. + Register an activity for the first time in the activity dimension. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_create - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_create + } } aa_register_case \ -procs {::xolp::Activity} \ -cats {smoke} \ activity_update { - Update activity in the activity dimension. + Update activity in the activity dimension. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_create - aa_call_component activity_update - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_create + aa_call_component activity_update + } } aa_register_case \ -procs {::xolp::Activity} \ -cats {smoke} \ activity_require { - Require activity in the activity dimension. + Require activity in the activity dimension. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_require - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_require + } } aa_register_case \ -procs {::xolp::Activity} \ -cats {smoke} \ activity_delete { - Delete activity in the activity dimension. + Delete activity in the activity dimension. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_create - aa_call_component activity_delete - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_create + aa_call_component activity_delete + } } aa_register_case \ -procs {::xolp::Indicator ::xolp::Activity} \ -cats {smoke} \ indicator_create { - Create one simple indicator. + Create one simple indicator. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_create - aa_call_component indicator_create_simple - aa_call_component indicator_create_full - aa_call_component indicator_create_bad - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_create + aa_call_component indicator_create_simple + aa_call_component indicator_create_full + aa_call_component indicator_create_bad + } } aa_register_case \ -procs {::xolp::Indicator} \ -cats {smoke} \ indicator_update { - Update one simple indicator. + Update one simple indicator. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_create - aa_call_component indicator_create_full - aa_call_component indicator_update - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_create + aa_call_component indicator_create_full + aa_call_component indicator_update + } } aa_register_case \ -procs {::xolp::Indicator} \ -cats {smoke} \ indicator_delete { - Delete one simple indicator. + Delete one simple indicator. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - aa_call_component activity_create - aa_call_component indicator_create_simple - aa_call_component indicator_delete - aa_call_component activity_delete - } + aa_run_with_teardown \ + -rollback \ + -test_code { + aa_call_component activity_create + aa_call_component indicator_create_simple + aa_call_component indicator_delete + aa_call_component activity_delete + } } aa_register_case \ -init_classes {test_data_populate} \ -cats {api} \ indicator_verb_queries { - Query indicators based on verbs. + Query indicators based on verbs. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids [ad_conn user_id] \ - -activity_iris $activity_iris \ - -activity_verb_iris {"xolp:test:v:competed"}] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 3 - aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 150.0 + aa_run_with_teardown \ + -rollback \ + -test_code { + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids [ad_conn user_id] \ + -activity_iris $activity_iris \ + -activity_verb_iris {"xolp:test:v:competed"}] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 3 + aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 150.0 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids [ad_conn user_id] \ - -activity_iris $activity_iris \ - -activity_verb_iris {"xolp:test:v:practiced"}] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 4 - aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 145.0 - } + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids [ad_conn user_id] \ + -activity_iris $activity_iris \ + -activity_verb_iris {"xolp:test:v:practiced"}] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 4 + aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 145.0 + } } aa_register_case \ -cats {api} \ indicator_datetime_queries { - Query indicators based on time. + Query indicators based on time. } { - aa_run_with_teardown \ - -rollback \ - -test_code { + aa_run_with_teardown \ + -rollback \ + -test_code { - # Assumption: Aggregations of the activity hierarchy do - # not fit well to time-queries, because - # questions like "What mark would you have - # if you had been only attending the course - # on Mondays" doesn't make too much - # sense. However, the average result on - # weekends in comparison to weekdays might - # be interesting. + # Assumption: Aggregations of the activity hierarchy do + # not fit well to time-queries, because + # questions like "What mark would you have + # if you had been only attending the course + # on Mondays" doesn't make too much + # sense. However, the average result on + # weekends in comparison to weekdays might + # be interesting. - set activity_iri "http://example.com/practice1" - set activity_version_id [::xolp::Activity require -iri $activity_iri -return id] + set activity_iri "http://example.com/practice1" + set activity_version_id [::xolp::Activity require -iri $activity_iri -return id] - # Weekend practicing - ::xolp::Indicator insert \ - -activity_version_id $activity_version_id \ - -end_timestamp "2016-12-31 23:00:00" \ - -result_numerator 40 - ::xolp::Indicator insert \ - -activity_version_id $activity_version_id \ - -end_timestamp "2017-01-01 01:00:00" \ - -result_numerator 48 + # Weekend practicing + ::xolp::Indicator insert \ + -activity_version_id $activity_version_id \ + -end_timestamp "2016-12-31 23:00:00" \ + -result_numerator 40 + ::xolp::Indicator insert \ + -activity_version_id $activity_version_id \ + -end_timestamp "2017-01-01 01:00:00" \ + -result_numerator 48 - # Weekday practicing - ::xolp::Indicator insert \ - -activity_version_id $activity_version_id \ - -end_timestamp "2017-01-02 11:30:00" \ - -result_numerator 60 - ::xolp::Indicator insert \ - -activity_version_id $activity_version_id \ - -end_timestamp "2017-01-02 13:15:00" \ - -result_numerator 68 + # Weekday practicing + ::xolp::Indicator insert \ + -activity_version_id $activity_version_id \ + -end_timestamp "2017-01-02 11:30:00" \ + -result_numerator 60 + ::xolp::Indicator insert \ + -activity_version_id $activity_version_id \ + -end_timestamp "2017-01-02 13:15:00" \ + -result_numerator 68 - # Weekend 2016 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids [ad_conn user_id] \ - -activity_iris $activity_iri \ - -begin_date_constraint "begin_year = '2016'" \ - -end_date_constraint "end_is_weekend = TRUE" ] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 1 - aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 40.0 + # Weekend 2016 + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids [ad_conn user_id] \ + -activity_iris $activity_iri \ + -begin_date_constraint "begin_year = '2016'" \ + -end_date_constraint "end_is_weekend = TRUE" ] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 1 + aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 40.0 - # Weekend - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids [ad_conn user_id] \ - -activity_iris $activity_iri \ - -end_date_constraint "end_is_weekend = TRUE" ] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 2 - aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 88.0 + # Weekend + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids [ad_conn user_id] \ + -activity_iris $activity_iri \ + -end_date_constraint "end_is_weekend = TRUE" ] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 2 + aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 88.0 - # AM - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids [ad_conn user_id] \ - -activity_iris $activity_iri \ - -end_time_constraint "end_day_time_name = 'am'" ] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 1 - aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 60.0 + # AM + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids [ad_conn user_id] \ + -activity_iris $activity_iri \ + -end_time_constraint "end_day_time_name = 'am'" ] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 1 + aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 60.0 - # Total - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids [ad_conn user_id] \ - -activity_iris $activity_iri] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 4 - aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 216.0 - } + # Total + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids [ad_conn user_id] \ + -activity_iris $activity_iri] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 4 + aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 216.0 + } } aa_register_case \ -cats {api} \ scenario_composite_activity { - Register several indicators for several activities that form a composite. + Register several indicators for several activities that form a composite. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - lassign [list [ad_conn user_id] {*}[::xolp::test::create_test_users -nr 5]] u1 u2 u3 u4 u5 u6 + aa_run_with_teardown \ + -rollback \ + -test_code { + lassign [list [ad_conn user_id] {*}[::xolp::test::create_test_users -nr 5]] u1 u2 u3 u4 u5 u6 - # Setup the course, add schema and scale. - set c1 [::xolp::Activity require -iri "http://example.com/course1" -return id] - set evalschema_id [::xolp::EvaluationSchema require -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" -update false -return id] - set evalscale [::xolp::EvaluationScale require -iri "http://example.com/evalscales/course1" -evalschema_id $evalschema_id -thresholds "60 70 80 90"] - $evalscale add_to_activity -activity_version_id $c1 + # Setup the course, add schema and scale. + set c1 [::xolp::Activity require -iri "http://example.com/course1" -return id] + set evalschema_id [::xolp::EvaluationSchema require -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" -update false -return id] + set evalscale [::xolp::EvaluationScale require -iri "http://example.com/evalscales/course1" -evalschema_id $evalschema_id -thresholds "60 70 80 90"] + $evalscale add_to_activity -activity_version_id $c1 - set c1t1 [::xolp::Activity require -iri "http://example.com/course1/test1" -return id] - set c1t2 [::xolp::Activity require -iri "http://example.com/course1/test2" -return id] + set c1t1 [::xolp::Activity require -iri "http://example.com/course1/test1" -return id] + set c1t2 [::xolp::Activity require -iri "http://example.com/course1/test2" -return id] - # The final test performance counts 50% overall. - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/test1" \ - -context_iri "http://example.com/course1" \ - -check false \ - -weight_numerator 25 \ - -weight_denominator 100 - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/test2" \ - -context_iri "http://example.com/course1" \ - -check false \ - -weight_numerator 50 \ - -weight_denominator 100 + # The final test performance counts 50% overall. + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/test1" \ + -context_iri "http://example.com/course1" \ + -check false \ + -weight_numerator 25 \ + -weight_denominator 100 + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/test2" \ + -context_iri "http://example.com/course1" \ + -check false \ + -weight_numerator 50 \ + -weight_denominator 100 - # We create a virtual "groups" context to collect all (alternative) groups. - # This allows for easier weighting (otherwise course1's subactivities would add up to more than 100% - set c1g [::xolp::Activity require -iri "http://example.com/course1/groups" -return id] - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/groups" \ - -context_iri "http://example.com/course1" \ - -weight_numerator 25 \ - -weight_denominator 100 + # We create a virtual "groups" context to collect all (alternative) groups. + # This allows for easier weighting (otherwise course1's subactivities would add up to more than 100% + set c1g [::xolp::Activity require -iri "http://example.com/course1/groups" -return id] + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/groups" \ + -context_iri "http://example.com/course1" \ + -weight_numerator 25 \ + -weight_denominator 100 - # We create the alternative groups and their tasks. - set c1g1 [::xolp::Activity require -iri "http://example.com/course1/group1" -return id] - set c1g1p1 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation1" -return id] - set c1g1p2 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation2" -return id] - set c1g2 [::xolp::Activity require -iri "http://example.com/course1/group2" -return id] - set c1g2d [::xolp::Activity require -iri "http://example.com/course1/group2/deliverable" -return id] - set c1g2p [::xolp::Activity require -iri "http://example.com/course1/group2/presentation" -return id] + # We create the alternative groups and their tasks. + set c1g1 [::xolp::Activity require -iri "http://example.com/course1/group1" -return id] + set c1g1p1 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation1" -return id] + set c1g1p2 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation2" -return id] + set c1g2 [::xolp::Activity require -iri "http://example.com/course1/group2" -return id] + set c1g2d [::xolp::Activity require -iri "http://example.com/course1/group2/deliverable" -return id] + set c1g2p [::xolp::Activity require -iri "http://example.com/course1/group2/presentation" -return id] - # The first presentation of each group counts not as much as the second one. - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/group1/presentation1" \ - -context_iri "http://example.com/course1/group1" \ - -check false \ - -weight_numerator 4 \ - -weight_denominator 10 - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/group1/presentation2" \ - -context_iri "http://example.com/course1/group1" \ - -weight_numerator 6 \ - -weight_denominator 10 - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/group2/presentation" \ - -context_iri "http://example.com/course1/group2" \ - -check false \ - -weight_numerator 4 \ - -weight_denominator 10 - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/group2/deliverable" \ - -context_iri "http://example.com/course1/group2" \ - -weight_numerator 6 \ - -weight_denominator 10 + # The first presentation of each group counts not as much as the second one. + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/group1/presentation1" \ + -context_iri "http://example.com/course1/group1" \ + -check false \ + -weight_numerator 4 \ + -weight_denominator 10 + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/group1/presentation2" \ + -context_iri "http://example.com/course1/group1" \ + -weight_numerator 6 \ + -weight_denominator 10 + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/group2/presentation" \ + -context_iri "http://example.com/course1/group2" \ + -check false \ + -weight_numerator 4 \ + -weight_denominator 10 + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/group2/deliverable" \ + -context_iri "http://example.com/course1/group2" \ + -weight_numerator 6 \ + -weight_denominator 10 - # The groups performance, as well as the first test, count only 25% of the overall course mark. - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/group1" \ - -context_iri "http://example.com/course1/groups" \ - -check false \ - -weight_numerator 100 \ - -weight_denominator 100 - ::xolp::Activity add_to_context \ - -activity_iri "http://example.com/course1/group2" \ - -context_iri "http://example.com/course1/groups" \ - -check false \ - -weight_numerator 100 \ - -weight_denominator 100 + # The groups performance, as well as the first test, count only 25% of the overall course mark. + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/group1" \ + -context_iri "http://example.com/course1/groups" \ + -check false \ + -weight_numerator 100 \ + -weight_denominator 100 + ::xolp::Activity add_to_context \ + -activity_iri "http://example.com/course1/group2" \ + -context_iri "http://example.com/course1/groups" \ + -check false \ + -weight_numerator 100 \ + -weight_denominator 100 - # User 1 - ::xolp::Indicator insert \ - -user_id $u1 \ - -activity_version_id $c1g1p1 \ - -result_numerator 25 - ::xolp::Indicator insert \ - -user_id $u1 \ - -activity_version_id $c1g1p2 \ - -result_numerator 75 - ::xolp::Indicator insert \ - -user_id $u1 \ - -activity_version_id $c1t1 \ - -result_numerator 60 - ::xolp::Indicator insert \ - -user_id $u1 \ - -activity_version_id $c1t2 \ - -result_numerator 90 + # User 1 + ::xolp::Indicator insert \ + -user_id $u1 \ + -activity_version_id $c1g1p1 \ + -result_numerator 25 + ::xolp::Indicator insert \ + -user_id $u1 \ + -activity_version_id $c1g1p2 \ + -result_numerator 75 + ::xolp::Indicator insert \ + -user_id $u1 \ + -activity_version_id $c1t1 \ + -result_numerator 60 + ::xolp::Indicator insert \ + -user_id $u1 \ + -activity_version_id $c1t2 \ + -result_numerator 90 - # User 2 - ::xolp::Indicator insert \ - -user_id $u2 \ - -activity_version_id $c1g1p1 \ - -result_numerator 23 - ::xolp::Indicator insert \ - -user_id $u2 \ - -activity_version_id $c1g1p2 \ - -result_numerator 43 - ::xolp::Indicator insert \ - -user_id $u2 \ - -activity_version_id $c1t1 \ - -result_numerator 48 - ::xolp::Indicator insert \ - -user_id $u2 \ - -activity_version_id $c1t2 \ - -result_numerator 65 + # User 2 + ::xolp::Indicator insert \ + -user_id $u2 \ + -activity_version_id $c1g1p1 \ + -result_numerator 23 + ::xolp::Indicator insert \ + -user_id $u2 \ + -activity_version_id $c1g1p2 \ + -result_numerator 43 + ::xolp::Indicator insert \ + -user_id $u2 \ + -activity_version_id $c1t1 \ + -result_numerator 48 + ::xolp::Indicator insert \ + -user_id $u2 \ + -activity_version_id $c1t2 \ + -result_numerator 65 - # User 3 - Did nothing + # User 3 - Did nothing - # User 4 - Failed on first test, thus failed completely - ::xolp::Indicator insert \ - -user_id $u4 \ - -activity_version_id $c1t1 \ - -result_numerator 3 - ::xolp::Indicator insert \ - -user_id $u4 \ - -activity_version_id $c1g2d \ - -result_numerator 100 - ::xolp::Indicator insert \ - -user_id $u4 \ - -activity_version_id $c1g2p \ - -result_numerator 90 - ::xolp::Indicator insert \ - -user_id $u4 \ - -activity_version_id $c1t2 \ - -result_numerator 99 + # User 4 - Failed on first test, thus failed completely + ::xolp::Indicator insert \ + -user_id $u4 \ + -activity_version_id $c1t1 \ + -result_numerator 3 + ::xolp::Indicator insert \ + -user_id $u4 \ + -activity_version_id $c1g2d \ + -result_numerator 100 + ::xolp::Indicator insert \ + -user_id $u4 \ + -activity_version_id $c1g2p \ + -result_numerator 90 + ::xolp::Indicator insert \ + -user_id $u4 \ + -activity_version_id $c1t2 \ + -result_numerator 99 - # User 1 on Presentation 1 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u1 \ - -activity_iris "http://example.com/course1/group1/presentation1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 1 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 25 + # User 1 on Presentation 1 + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u1 \ + -activity_iris "http://example.com/course1/group1/presentation1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 1 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 25 - aa_equals "User 1 in test 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test1"] 60.00 - aa_equals "User 1 in test 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test2"] 90.00 - aa_equals "User 1 in group 1 presentation 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation1"] 25.00 - aa_equals "User 1 in group 1 presentation 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation2"] 75.00 - aa_equals "User 1 in group 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1"] 55.00 - aa_equals "User 1 in virtual group:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/groups"] 55.00 - aa_equals "User 1 in course 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1"] 73.75 + aa_equals "User 1 in test 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test1"] 60.00 + aa_equals "User 1 in test 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test2"] 90.00 + aa_equals "User 1 in group 1 presentation 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation1"] 25.00 + aa_equals "User 1 in group 1 presentation 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation2"] 75.00 + aa_equals "User 1 in group 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1"] 55.00 + aa_equals "User 1 in virtual group:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/groups"] 55.00 + aa_equals "User 1 in course 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1"] 73.75 - aa_equals "User 2 in group 1 test 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test1"] 48.00 - aa_equals "User 2 in group 1 test 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test2"] 65.00 - aa_equals "User 2 in group 1 presentation 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation1"] 23.00 - aa_equals "User 2 in group 1 presentation 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation2"] 43.00 - aa_equals "User 2 in group 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1"] 35.00 - aa_equals "User 2 in virtual group:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/groups"] 35.00 - aa_equals "User 2 in course 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1"] 53.25 + aa_equals "User 2 in group 1 test 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test1"] 48.00 + aa_equals "User 2 in group 1 test 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test2"] 65.00 + aa_equals "User 2 in group 1 presentation 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation1"] 23.00 + aa_equals "User 2 in group 1 presentation 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation2"] 43.00 + aa_equals "User 2 in group 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1"] 35.00 + aa_equals "User 2 in virtual group:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/groups"] 35.00 + aa_equals "User 2 in course 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1"] 53.25 - # User 1 on Group 1 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u1 \ - -activity_iris "http://example.com/course1/group1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 2 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 100 + # User 1 on Group 1 + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u1 \ + -activity_iris "http://example.com/course1/group1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 2 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 100 - # User 2 on Group 1 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u2 \ - -activity_iris "http://example.com/course1/group1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 2 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 66 + # User 2 on Group 1 + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u2 \ + -activity_iris "http://example.com/course1/group1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 2 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 66 - # User 3 on Group 1 (absent) - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u3 \ - -activity_iris "http://example.com/course1/group1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 0 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0 + # User 3 on Group 1 (absent) + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u3 \ + -activity_iris "http://example.com/course1/group1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 0 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0 - # User 1 on whole course - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u1 \ - -activity_iris "http://example.com/course1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 4 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 250 + # User 1 on whole course + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u1 \ + -activity_iris "http://example.com/course1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 4 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 250 - # User 2 on whole course - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u2 \ - -activity_iris "http://example.com/course1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 4 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 179 + # User 2 on whole course + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u2 \ + -activity_iris "http://example.com/course1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 4 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 179 - # User 3 on whole course - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u3 \ - -activity_iris "http://example.com/course1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 0 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0 + # User 3 on whole course + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u3 \ + -activity_iris "http://example.com/course1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 0 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0 - # User 4 on whole course - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u4 \ - -activity_iris "http://example.com/course1"] - aa_equals "Number of indicators:" [llength [dict keys $li]] 4 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 292 + # User 4 on whole course + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u4 \ + -activity_iris "http://example.com/course1"] + aa_equals "Number of indicators:" [llength [dict keys $li]] 4 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 292 - } + } } aa_register_case \ -procs {::xolp::Activity} \ -cats {populator stress} \ populate_activities { - Generate 10,000 activities. + Generate 10,000 activities. } { aa_run_with_teardown \ -rollback \ @@ -1225,8 +1225,8 @@ for {set i 1} {$i <= $amount} {incr i} { set activity_iri [::xolp::test::create_test_iris] set activity [::xolp::Activity new_persistent_object \ - -iri $activity_iri \ - -title "Activity $i"] + -iri $activity_iri \ + -title "Activity $i"] lappend activity_version_ids [$activity activity_version_id] lappend activity_iris $activity_iri } @@ -1237,8 +1237,8 @@ -procs {::xolp::Indicator} \ -cats {populator stress} \ populate_indicators { - Generate 250,000 random indicators for 5,000 users - and 5000 activities. + Generate 250,000 random indicators for 5,000 users + and 5000 activities. } { aa_run_with_teardown \ -rollback \ @@ -1256,13 +1256,13 @@ set end_timestamp [::xolp::test::random_timestamp] set begin_timestamp [::xolp::test::random_earlier_timestamp $end_timestamp] ::xolp::Indicator insert \ - -user_id $user_id \ - -activity_verb_id $activity_verb_id \ - -activity_version_id $activity_version_id \ - -begin_timestamp $begin_timestamp \ - -end_timestamp $end_timestamp \ - -result_numerator [expr {int(rand()*100)}] \ - -result_denominator 100 + -user_id $user_id \ + -activity_verb_id $activity_verb_id \ + -activity_version_id $activity_version_id \ + -begin_timestamp $begin_timestamp \ + -end_timestamp $end_timestamp \ + -result_numerator [expr {int(rand()*100)}] \ + -result_denominator 100 } } } @@ -1271,148 +1271,148 @@ -init_classes {test_data_populate} \ -cats {api} \ user_get_composite_activity_result { - Get result a user gained in a context (for example a community/course). + Get result a user gained in a context (for example a community/course). } { - aa_run_with_teardown \ - -test_code { - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 0] \ - -iri [lindex $context_iris 0] \ - -policy best] - aa_true "Best result: expected 41.00% got $result" {[format "%.2f" $result] == 41.00} + aa_run_with_teardown \ + -test_code { + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 0] \ + -iri [lindex $context_iris 0] \ + -policy best] + aa_true "Best result: expected 41.00% got $result" {[format "%.2f" $result] == 41.00} - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 0] \ - -iri [lindex $context_iris 0] \ - -policy worst] - aa_true "Worst result: expected 18.44% got $result" {[format "%.2f" $result] == 18.44} + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 0] \ + -iri [lindex $context_iris 0] \ + -policy worst] + aa_true "Worst result: expected 18.44% got $result" {[format "%.2f" $result] == 18.44} - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 0] \ - -iri [lindex $context_iris 0] \ - -policy average] - aa_true "Average result: expected 28.33% got $result" {[format "%.2f" $result] == 28.33} + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 0] \ + -iri [lindex $context_iris 0] \ + -policy average] + aa_true "Average result: expected 28.33% got $result" {[format "%.2f" $result] == 28.33} - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 1] \ - -iri [lindex $context_iris 1]] - aa_true "Best result: expected 87% got $result" {$result == 87} - } + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 1] \ + -iri [lindex $context_iris 1]] + aa_true "Best result: expected 87% got $result" {$result == 87} + } } aa_register_case \ -init_classes {test_data_populate} \ -cats {api} \ user_get_result { - Get result of a user. + Get result of a user. } { - aa_run_with_teardown \ - -test_code { - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 1] \ - -iri [lindex $activity_iris 0] \ - -policy best] - aa_log "Result: $result" - aa_true "User didn't do this activity" {$result eq ""} + aa_run_with_teardown \ + -test_code { + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 1] \ + -iri [lindex $activity_iris 0] \ + -policy best] + aa_log "Result: $result" + aa_true "User didn't do this activity" {$result eq ""} - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 0] \ - -iri [lindex $activity_iris 0] \ - -policy best] - aa_log "Result: $result" - aa_true "Best result is 100%" {$result == 100} + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 0] \ + -iri [lindex $activity_iris 0] \ + -policy best] + aa_log "Result: $result" + aa_true "Best result is 100%" {$result == 100} - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 0] \ - -iri [lindex $activity_iris 0] \ - -policy average] - aa_log "Result: $result" - aa_true "Average result is 62.5%" {$result == 62.5} + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 0] \ + -iri [lindex $activity_iris 0] \ + -policy average] + aa_log "Result: $result" + aa_true "Average result is 62.5%" {$result == 62.5} - set result [::xolp::User get_result \ - -user_id [lindex $user_ids 0] \ - -iri [lindex $activity_iris 0] \ - -policy worst] + set result [::xolp::User get_result \ + -user_id [lindex $user_ids 0] \ + -iri [lindex $activity_iris 0] \ + -policy worst] - aa_log "Result: $result" - aa_true "Worst result is ~33%" {[format "%.2f" $result] == 33.33} - } + aa_log "Result: $result" + aa_true "Worst result is ~33%" {[format "%.2f" $result] == 33.33} + } } aa_register_case \ -init_classes {test_data_populate} \ -cats {api} \ indicator_get_duration { - Get indicators duration... + Get indicators duration... } { - aa_run_with_teardown \ - -test_code { - lassign $user_ids u1 u2 - lassign $activity_iris a1 a2 a3 - lassign $context_iris c1 c2 c3 + aa_run_with_teardown \ + -test_code { + lassign $user_ids u1 u2 + lassign $activity_iris a1 a2 a3 + lassign $context_iris c1 c2 c3 - set li [::xolp::Indicator get_values_from_db \ - -properties "duration" \ - -aggregate "sum" \ - -user_ids $u1 \ - -activity_iris $c1] - aa_log $li - aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 7 - aa_equals "Sum of indicators:" [dict values $li] "06:15:00" + set li [::xolp::Indicator get_values_from_db \ + -properties "duration" \ + -aggregate "sum" \ + -user_ids $u1 \ + -activity_iris $c1] + aa_log $li + aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 7 + aa_equals "Sum of indicators:" [dict values $li] "06:15:00" - set li [::xolp::Indicator get_values_from_db \ - -properties "duration" \ - -aggregate "sum" \ - -user_ids $u1 \ - -activity_iris $a2] - aa_log $li - aa_equals "Number of indicators:" [llength [dict keys $li]] 1 - aa_equals "Sum of indicators:" [dict values $li] "01:45:00" + set li [::xolp::Indicator get_values_from_db \ + -properties "duration" \ + -aggregate "sum" \ + -user_ids $u1 \ + -activity_iris $a2] + aa_log $li + aa_equals "Number of indicators:" [llength [dict keys $li]] 1 + aa_equals "Sum of indicators:" [dict values $li] "01:45:00" - set li [::xolp::Indicator get_values_from_db \ - -properties "duration" \ - -aggregate "sum" \ - -user_ids $u2 \ - -activity_iris $c2] - aa_log $li - aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 1 - aa_equals "Sum of indicators:" [dict values $li] "01:00:00" - } + set li [::xolp::Indicator get_values_from_db \ + -properties "duration" \ + -aggregate "sum" \ + -user_ids $u2 \ + -activity_iris $c2] + aa_log $li + aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 1 + aa_equals "Sum of indicators:" [dict values $li] "01:00:00" + } } aa_register_case \ -init_classes {test_data_populate} \ -cats {api} \ indicator_get_values { - Get indicators values... + Get indicators values... } { - aa_run_with_teardown \ - -test_code { - lassign $user_ids u1 u2 - lassign $activity_iris a1 a2 a3 - lassign $context_iris c1 c2 c3 + aa_run_with_teardown \ + -test_code { + lassign $user_ids u1 u2 + lassign $activity_iris a1 a2 a3 + lassign $context_iris c1 c2 c3 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u1 \ - -activity_iris $c1] - aa_equals "Number of indicators:" [llength [dict keys $li]] 7 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 295 + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u1 \ + -activity_iris $c1] + aa_equals "Number of indicators:" [llength [dict keys $li]] 7 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 295 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u1 \ - -activity_iris $a2] - aa_equals "Number of indicators:" [llength [dict keys $li]] 2 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 45 + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u1 \ + -activity_iris $a2] + aa_equals "Number of indicators:" [llength [dict keys $li]] 2 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 45 - set li [::xolp::Indicator get_values_from_db \ - -properties "result_percentage" \ - -user_ids $u2 \ - -activity_iris $c2] - aa_equals "Number of indicators:" [llength [dict keys $li]] 1 - aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 87 - } + set li [::xolp::Indicator get_values_from_db \ + -properties "result_percentage" \ + -user_ids $u2 \ + -activity_iris $c2] + aa_equals "Number of indicators:" [llength [dict keys $li]] 1 + aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 87 + } } aa_register_case \ @@ -1424,158 +1424,165 @@ aa_run_with_teardown \ -rollback \ -test_code { - ::xolp::Indicator insert \ - -user_id [ad_conn user_id] \ - -activity_version_id $exam1 \ - -result_numerator 90 + ::xolp::Indicator insert \ + -user_id [ad_conn user_id] \ + -activity_version_id $exam1 \ + -result_numerator 90 - ::xolp::Indicator insert \ - -user_id [ad_conn user_id] \ - -activity_version_id $exam2 \ - -result_numerator 80 + ::xolp::Indicator insert \ + -user_id [ad_conn user_id] \ + -activity_version_id $exam2 \ + -result_numerator 80 - set c [::xolp::User get_competencies -user_id [ad_conn user_id]] - aa_equals "2 directly attached competencies." [llength [dict keys $c]] 2 - set c [::xolp::User get_competencies_recursive -user_id [ad_conn user_id]] - aa_equals "6 competencies." [llength [dict keys $c]] 6 + set c [::xolp::User get_competencies -user_id [ad_conn user_id]] + aa_equals "2 directly attached competencies." [llength [dict keys $c]] 2 + set c [::xolp::User get_competencies_recursive -user_id [ad_conn user_id]] + aa_equals "6 competencies." [llength [dict keys $c]] 6 } } aa_register_case \ -init_classes {competency_test_data_populate} \ -cats {api} \ user_get_competency_evaluation { - Get results/evaluations of users for competencies. + Get results/evaluations of users for competencies. } { - aa_run_with_teardown \ - -rollback \ - -test_code { - ::xolp::Indicator insert \ - -user_id [ad_conn user_id] \ - -activity_version_id $exam1 \ - -result_numerator 90 + aa_run_with_teardown \ + -rollback \ + -test_code { + ::xolp::Indicator insert \ + -user_id [ad_conn user_id] \ + -activity_version_id $exam1 \ + -result_numerator 90 - ::xolp::Indicator insert \ - -user_id [ad_conn user_id] \ - -activity_version_id $exam2 \ - -result_numerator 80 + ::xolp::Indicator insert \ + -user_id [ad_conn user_id] \ + -activity_version_id $exam2 \ + -result_numerator 80 - # - # Tcl - # - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -policy "best" \ - -competency_iri "http://example.com/competencies/programming/tcl"] - aa_equals "User has 72% of competency 'Tcl Programming' (best)" $result 72.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -policy "best" \ - -competency_iri "http://example.com/competencies/programming/tcl"] - aa_equals "User is a senior Tcl dev. (best)" [$level name] "senior" + # + # Tcl + # + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -policy "best" \ + -competency_iri "http://example.com/competencies/programming/tcl"] + aa_equals "User has 72% of competency 'Tcl Programming' (best)" $result 72.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -policy "best" \ + -competency_iri "http://example.com/competencies/programming/tcl"] + aa_equals "User is a senior Tcl dev. (best)" [$level name] "senior" - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -policy "average" \ - -competency_iri "http://example.com/competencies/programming/tcl"] - aa_equals "User has 72% of competency 'Tcl Programming' (average)" $result 51.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -policy "average" \ - -competency_iri "http://example.com/competencies/programming/tcl"] - aa_equals "User is a senior Tcl dev. (average)" [$level name] "senior" + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -policy "average" \ + -competency_iri "http://example.com/competencies/programming/tcl"] + aa_equals "User has 72% of competency 'Tcl Programming' (average)" $result 51.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -policy "average" \ + -competency_iri "http://example.com/competencies/programming/tcl"] + aa_equals "User is a senior Tcl dev. (average)" [$level name] "senior" - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -policy "worst" \ - -competency_iri "http://example.com/competencies/programming/tcl"] - aa_equals "User has 72% of competency 'Tcl Programming' (worst)" $result 30.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -policy "worst" \ - -competency_iri "http://example.com/competencies/programming/tcl"] - aa_equals "User is a senior Tcl dev. (worst)" [$level name] "junior" + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -policy "worst" \ + -competency_iri "http://example.com/competencies/programming/tcl"] + aa_equals "User has 72% of competency 'Tcl Programming' (worst)" $result 30.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -policy "worst" \ + -competency_iri "http://example.com/competencies/programming/tcl"] + aa_equals "User is a senior Tcl dev. (worst)" [$level name] "junior" - # - # Database Design - # - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/database-design"] - aa_equals "User has 40% of competency 'Database Design'" $result 40.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/database-design"] - aa_equals "User is a junior DB dev." [$level name] "junior" + # + # Database Design + # + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/database-design"] + aa_equals "User has 40% of competency 'Database Design'" $result 40.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/database-design"] + aa_equals "User is a junior DB dev." [$level name] "junior" - # - # Full Stack Web Development - # - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/fullstack-webdev"] - aa_equals "User has 28% full stack power." $result 28.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/fullstack-webdev"] - aa_equals "User is a junior dev." [$level name] "junior" + # + # Full Stack Web Development + # + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/fullstack-webdev"] + aa_equals "User has 28% full stack power." $result 28.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/fullstack-webdev"] + aa_equals "User is a junior dev." [$level name] "junior" - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -policy "average" \ - -competency_iri "http://example.com/competencies/fullstack-webdev"] - aa_equals "User has 22.75% full stack power." $result 22.75 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -policy "average" \ - -competency_iri "http://example.com/competencies/fullstack-webdev"] - aa_equals "User is a luser dev." [$level name] "luser" + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -policy "average" \ + -competency_iri "http://example.com/competencies/fullstack-webdev"] + aa_equals "User has 22.75% full stack power." $result 22.75 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -policy "average" \ + -competency_iri "http://example.com/competencies/fullstack-webdev"] + aa_equals "User is a luser dev." [$level name] "luser" - # - # Software Development - # - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/software-development"] - aa_equals "User has 14% software dev competency." $result 14.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/software-development"] - aa_equals "User is a luser dev." [$level name] "luser" + # + # Software Development + # + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/software-development"] + aa_equals "User has 14% software dev competency." $result 14.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/software-development"] + aa_equals "User is a luser dev." [$level name] "luser" - # - # Computational Thinking - # - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/computational-thinking"] - aa_equals "User has 21% computational thinking skills." $result 21.00 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/computational-thinking"] - aa_equals "User is a luser comp-thinker." [$level name] "luser" + # + # Computational Thinking + # + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/computational-thinking"] + aa_equals "User has 21% computational thinking skills." $result 21.00 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/computational-thinking"] + aa_equals "User is a luser comp-thinker." [$level name] "luser" - # - # Abstract Thinking - # - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/abstract-thinking"] - aa_equals "User can 12.6 abstract thinking skills" $result 12.60 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -competency_iri "http://example.com/competencies/abstract-thinking"] - aa_equals "User is not a thinker." [$level name] "luser" + # + # Abstract Thinking + # + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/abstract-thinking"] + aa_equals "User can 12.6 abstract thinking skills" $result 12.60 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -competency_iri "http://example.com/competencies/abstract-thinking"] + aa_equals "User is not a thinker." [$level name] "luser" - set result [::xolp::User get_competency_result \ - -user_id [ad_conn user_id] \ - -policy "average" \ - -competency_iri "http://example.com/competencies/abstract-thinking"] - aa_equals "User can 10.2375 abstract thinking skills" $result 10.24 - set level [::xolp::User get_competency_evaluation \ - -user_id [ad_conn user_id] \ - -policy "average" \ - -competency_iri "http://example.com/competencies/abstract-thinking"] - aa_equals "User is not a thinker." [$level name] "luser" - } + set result [::xolp::User get_competency_result \ + -user_id [ad_conn user_id] \ + -policy "average" \ + -competency_iri "http://example.com/competencies/abstract-thinking"] + aa_equals "User can 10.2375 abstract thinking skills" $result 10.24 + set level [::xolp::User get_competency_evaluation \ + -user_id [ad_conn user_id] \ + -policy "average" \ + -competency_iri "http://example.com/competencies/abstract-thinking"] + aa_equals "User is not a thinker." [$level name] "luser" + } } + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: