From 85ecf8d809a6aef45003e0305a8f67b04dd8e3f4 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Wed, 2 Nov 2022 18:07:24 +0100 Subject: [PATCH] [IMP][FIX]Hy Odoo : test whole Odoo DSL + fixes --- Makefile | 1 + hy_odoo/odoo.hy | 7 +- hy_odoo/tests/test_odoo.hy | 293 +++++++++++++++++++++++++++++++++++++ setup.py | 2 +- 4 files changed, 299 insertions(+), 4 deletions(-) create mode 100644 hy_odoo/tests/test_odoo.hy diff --git a/Makefile b/Makefile index 372e272..f68c2da 100644 --- a/Makefile +++ b/Makefile @@ -6,3 +6,4 @@ clean: .PHONY: test test: hy hy_odoo/tests/test_xml.hy + hy hy_odoo/tests/test_odoo.hy diff --git a/hy_odoo/odoo.hy b/hy_odoo/odoo.hy index aae66e1..82c46f5 100644 --- a/hy_odoo/odoo.hy +++ b/hy_odoo/odoo.hy @@ -34,12 +34,13 @@ ; XML helpers functions and macros -(defn odoo [children] (xmlroot (xmln "odoo" {} children))) +(defn odoo [children] (xmlroot {"tag" "odoo" "attrs" {} "children" children})) (defn data [#* args] "Special data node, allow optional args on data tag" - (when (= (len args) 1) (setv args (.insert (list args) 0 {}))) - (xmln "data" args)) + (when (= (len args) 1) (do (setv args (list args)) + (.insert args 0 {}))) + (xmln "data" #* args)) ; Aliases (defn function [#* args] (xmln "function" #*args)) diff --git a/hy_odoo/tests/test_odoo.hy b/hy_odoo/tests/test_odoo.hy new file mode 100644 index 0000000..9ebb32a --- /dev/null +++ b/hy_odoo/tests/test_odoo.hy @@ -0,0 +1,293 @@ +;; -*- coding: utf-8 -*- +;; +;; Copyright 2022 Fabien Bourgeois +;; +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU Affero General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU Affero General Public License for more details. +;; +;; You should have received a copy of the GNU Affero General Public License +;; along with this program. If not, see . + +" Odoo Helpers tests " + +(require + hyrule.control [defmain] + hy-odoo.mtest *) + +(import unittest + functools [partial] + xml.etree.ElementTree :as ET + hy-odoo.xml [XMLDictElement] + hy-odoo.odoo :as od) + +(defclass TextOdooBase [(. unittest TestCase)] + "Odoo Helpers tests" + + (defn test-odoo [self] + " Test odoo function " + (setv element (od.odoo [])) + (o-assert-is-instance element (. ET Element)) + (o-assert-equal (. element tag) "odoo")) + + (defn test-data [self] + " Test data function " + (setv element (od.data [])) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal element.tag "data") + (o-assert-equal element.attrs {}) + + (setv element (od.data {"one" "attribute"} [])) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal element.tag "data") + (o-assert-equal element.attrs {"one" "attribute"})) + + (defn test-aliases [self] + " Test simple aliases to xmln " + (setv element (od.record {"one" "attribute"} "A child")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal element.tag "record") + (o-assert-equal element.attrs {"one" "attribute"}) + (o-assert-equal element.children ["A child"]) + + (setv element (od.tree)) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal element.tag "tree")) + + + (defn test-act-window-model [self] + " Test act_window function " + (setv element (od.act_window_model "sample.model" {"view_type" "form"})) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal element.tag "act_window") + (o-assert-equal (get (. element attrs) "view_type") "form") + (o-assert-equal (get (. element attrs) "id") "sample_model_view_action") + (o-assert-equal (get (. element attrs) "res_model") "sample.model") + (o-assert-equal (get (. element attrs) "name") "Sample Model Action")) + + (defn test-menunitem-model [self] + " Test menuitem function " + (setv element (od.menuitem-model "sample.model" {"groups" "base.user_employee"})) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "menuitem") + (o-assert-equal (get (. element attrs) "groups") "base.user_employee") + (o-assert-equal (get (. element attrs) "id") "sample_model_menu") + (o-assert-equal (get (. element attrs) "action") "sample_model_view_action")) + + (defn test-attribute [self] + " Test attribute function " + (setv element (od.attribute "invisible" "1")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "attribute") + (o-assert-equal (get (. element attrs) "name") "invisible") + (o-assert-equal (. element children) ["1"])) + + (defn test-fields [self] + " Test fields function " + (setv element (od.field {"one" "attribute"} "A child")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal element.tag "field") + + (setv element (od.field-name "A name")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "field") + (o-assert-equal (get (. element attrs) "name") "name") + (o-assert-equal (. element children) ["A name"]) + + (setv element (od.field-model "sample.model")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "field") + (o-assert-equal (get (. element attrs) "name") "model") + (o-assert-equal (. element children) ["sample.model"]) + + (setv element (od.field-inherit "module.xml_view")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "field") + (o-assert-equal (get (. element attrs) "name") "inherit_id") + (o-assert-equal (get (. element attrs) "ref") "module.xml_view") + (o-assert-false (. element children)) + + (setv element (od.field-arch)) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "field") + (o-assert-equal (get (. element attrs) "name") "arch") + (o-assert-equal (get (. element attrs) "type") "xml") + (o-assert-false (. element children))) + + (defn test-view [self] + " Test view function " + (setv element (od.view "view_xmlid" [])) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "record") + (o-assert-equal (get (. element attrs) "id") "view_xmlid") + (o-assert-equal (get (. element attrs) "model") "ir.ui.view") + (o-assert-false (. element children))) + + (defn test-view-def [self] + " Test view def function " + (setv element (od.view_def "view_xmlid" "View" "sample.model" [])) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "record") + (o-assert-equal (get (. element attrs) "id") "view_xmlid") + (o-assert-equal (get (. element attrs) "model") "ir.ui.view") + (o-assert-equal (len (. element children)) 3) + + (setv child (get (. element children) 0)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "name") + (o-assert-equal (. child children) ["View"]) + + (setv child (get (. element children) 1)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "model") + (o-assert-equal (. child children) ["sample.model"]) + + (setv child (get (. element children) 2)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "arch") + (o-assert-equal (get (. child attrs) "type") "xml") + (o-assert-false (. child children))) + + (defn test-view-new [self] + " Test view-new function " + (setv element (od.view-new "tree" "sample.model" [])) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element.tag) "record") + (o-assert-equal (get (. element attrs) "id") "sample_model_view_tree") + (o-assert-equal (get (. element attrs) "model") "ir.ui.view") + (o-assert-equal (len (. element children)) 3) + + (setv child (get (. element children) 0)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "name") + (o-assert-equal (. child children) ["Sample Model Tree"]) + + (setv child (get (. element children) 1)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "model") + (o-assert-equal (. child children) ["sample.model"]) + + (setv child (get (. element children) 2)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "arch") + (o-assert-equal (get (. child attrs) "type") "xml") + (o-assert-false (. child children))) + + + (defn test_view_inherit [self] + " Test view_inherit function " + (setv element (od.view-inherit "odoo.addons.module" "sample.model" "parent.view" [])) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "record") + (o-assert-equal (get (. element attrs) "id") "view_inherit_module") + (o-assert-equal (get (. element attrs) "model") "ir.ui.view") + (o-assert-equal (len (. element children)) 4) + + (setv child (get (. element children) 0)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "name") + (o-assert-equal (. child children) ["Sample Model Adaptations"]) + + (setv child (get (. element children) 1)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "model") + (o-assert-equal (. child children) ["sample.model"]) + + (setv child (get (. element children) 2)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "inherit_id") + (o-assert-false (. child children)) + + (setv child (get (. element children) 3)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "arch") + (o-assert-equal (get (. child attrs) "type") "xml") + (o-assert-false (. child children))) + + (defn test-actions-server-code [self] + " Test actions-server-code function " + (setv element (od.actions-server-code "sample.xmlid" "Code" "sample.model" + "record.do_something()")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "record") + (o-assert-equal (get (. element attrs) "id") "sample.xmlid") + (o-assert-equal (get (. element attrs) "model") "ir.actions.server") + (o-assert-equal (len (. element children)) 4) + + (setv child (get (. element children) 0)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "name") + (o-assert-equal (. child children) ["Code"]) + + (setv child (get (. element children) 1)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "model_id") + (o-assert-equal (get (. child attrs) "ref") "sample.model") + (o-assert-false (. child children)) + + (setv child (get (. element children) 2)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "state") + (o-assert-equal (. child children) ["code"]) + + (setv child (get (. element children) 3)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "code") + (o-assert-equal (. child children) ["record.do_something()"])) + + (defn test-client-action-multi [self] + " Test client_action_multi function " + (setv element (od.client-action-multi "sample.xmlid" "Multi" "sample.model" "sample.action")) + (o-assert-is-instance element XMLDictElement) + (o-assert-equal (. element tag) "record") + (o-assert-equal (get (. element attrs) "id") "sample.xmlid") + (o-assert-equal (get (. element attrs) "model") "ir.values") + (o-assert-equal (len (. element children)) 4) + + (setv child (get (. element children) 0)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "name") + (o-assert-equal (. child children) ["Multi"]) + + (setv child (get (. element children) 1)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "key2") + (o-assert-equal (get (. child attrs) "eval") "'client_action_multi'") + (o-assert-false (. child children)) + + (setv child (get (. element children) 2)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "model") + (o-assert-equal (get (. child attrs) "eval") "'sample.model'") + + (setv child (get (. element children) 3)) + (o-assert-is-instance child XMLDictElement) + (o-assert-equal (. child tag) "field") + (o-assert-equal (get (. child attrs) "name") "value") + (o-assert-equal (get (. child attrs) "eval") "'ir.actions.server,%d'%sample.action"))) + + +(defmain [] (.main unittest)) diff --git a/setup.py b/setup.py index c310a70..6321e1c 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ class install(install): setup( name="hy_odoo", - version="0.8.2pre", + version="0.8.3pre", packages=find_packages(), package_data={ 'hy_odoo': ['*.hy'],