Fork me on GitHub
#kaocha
<
2021-01-17
>
royalaid19:01:55

Hey all, I am trying to use kaocha with cljs-bean and it seems like deep-diff doesn't like beans:

Actual:
  -#function (meta,obj,prop__GT_key,key__GT_prop,transform,recursive_QMARK_,__arr,__cnt,__hash){
this.meta = meta;
this.obj = obj;
this.prop__GT_key = prop__GT_key;
this.key__GT_prop = key__GT_prop;
this.transform = transform;
this.recursive_QMARK_ = recursive_QMARK_;
this.__arr = __arr;
this.__cnt = __cnt;
this.__hash = __hash;
this.cljs$lang$protocol_mask$partition0$ = 2164131599;
this.cljs$lang$protocol_mask$partition1$ = 139268;
} "{:$metadata {:httpStatusCode 200, :httpHeaders {:date \"Sun, 17 Jan 2021 19:00:06 GMT\", :content-type \"applicat
ion/x-amz-json-1.0\", :x-amz-crc32 \"2745614147\", :x-amzn-requestid \"4760a996-a00c-4623-af7e-7bb7b94c611e\", :cont
ent-length \"2\", :server \"Jetty(9.4.18.v20190429)\"}, :requestId \"4760a996-a00c-4623-af7e-7bb7b94c611e\", :attemp
ts 1, :totalRetryDelay 0}, :Attributes nil, :ConsumedCapacity nil, :ItemCollectionMetrics nil}"
  +{}
Is there a clean way for me to add diffing of bean's?

royalaid20:01:42

I figured it might be enough do something like:

(ns deep-diff-bean
  (:require [cljs-bean.core :as be]
            [clojure.data :as data]
            [lambdaisland.deep-diff2 :as dd2]))

(defn diff-bean
  [exp act]
  (data/diff-associative
   (-> exp
       be/->js
       (js->clj :keywordize-keys true))
   (-> act
       be/->js
       (js->clj :keywordize-keys true))))

(extend-protocol lambdaisland.deep-diff2.diff-impl/Diff
 cljs-bean.core/Bean
  (-diff-similar [exp act]
    (lambdaisland.deep-diff2.diff-impl/diff-map exp act)))

(extend-protocol clojure.data/Diff
  cljs-bean.core/Bean
  (diff-similar [exp act]
    (diff-bean exp act)))

(comment
 (data/diff {:x 1} {:x 2})
 (dd2/pretty-print (data/diff (be/bean {:x 1}) (be/bean {:x 2})))

 (dd2/diff {:x 1} {:x 2})
 (dd2/pretty-print (dd2/diff (be/bean #js{:x 1}) (be/bean #js{:x 2}))))
which appears to work at the repl if I call the diffs in the comment block but when running kaocha-cljs2 against a node.js target it still pukes up. I have the protocol extension in my node-runner but it seems that isn't enough

royalaid20:01:20

but doesn't seem to work via kaocha-cljs2