Skip to content

Commit

Permalink
1633540638 - Monday Types - NumberType (#172)
Browse files Browse the repository at this point in the history
* Update Number Type

* Update requested changes

* Test formats.

Co-authored-by: Aswath Muralidharan <aswathm78@gmail.com>
Co-authored-by: AShatz <andrew.shatz@trix.solutions>
  • Loading branch information
3 people committed Sep 30, 2021
1 parent 3c51844 commit 050e09d
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 9 deletions.
19 changes: 18 additions & 1 deletion moncli/types.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import pytz, json
from datetime import datetime
from schematics.exceptions import ConversionError

from schematics.exceptions import ConversionError
from schematics.types import BaseType
Expand Down Expand Up @@ -82,7 +83,23 @@ def _set_metadata(self, value: en.cv.ColumnValue):
def _export(self, value):
return value

class NumberType(MondayType):
native_type = (int, float)
allow_casts = (str, )
null_value = ""

def _cast(self, value):
try:
number_value = int(value) if int(value) else float(value)
return number_value
except TypeError:
raise ConversionError('Couldn\'t interpret str {} as int or float.'.format(value))

def _export(self, value):
return str(value)


class TextType(MondayType):
native_type = str
allow_casts = (int, float)
null_value = ""
null_value = ""
77 changes: 69 additions & 8 deletions tests/monday_type_tests.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import json

from unittest.mock import patch
from nose.tools import ok_, eq_, raises
from schematics.common import NONEMPTY
from nose.tools import eq_

from moncli import client, entities as en
from moncli.entities import column_value as cv
Expand All @@ -12,7 +11,7 @@

@patch.object(en.Item,'get_column_values')
@patch('moncli.api_v2.get_items')
def test_should_succeed_when_to_native_returns_a_str_when_passing_in_a_textvalue_value_with_api_get_itemdata(get_items,get_column_values):
def test_text_type_should_succeed_when_to_native_returns_a_str_when_passing_in_a_textvalue_value_with_api_get_itemdata(get_items,get_column_values):

# Arrange
text_value = en.cv.create_column_value(ColumnType.text,id="text1",title="text")
Expand All @@ -30,7 +29,7 @@ def test_should_succeed_when_to_native_returns_a_str_when_passing_in_a_textvalue
eq_(value,"new text")


def test_should_succeed_when_to_native_returns_a_str_when_passing_in_either_int_or_floats():
def test_text_type_should_succeed_when_to_native_returns_a_str_when_passing_in_either_int_or_floats():

# Arrange

Expand All @@ -44,8 +43,9 @@ def test_should_succeed_when_to_native_returns_a_str_when_passing_in_either_int_
eq_(int_value,'1')
eq_(float_value,"1.0")


@patch('moncli.api_v2.get_items')
def test_should_succeed_when_to_native_returns_none_when_passing_in_none(get_items):
def test_text_type_should_succeed_when_to_native_returns_none_when_passing_in_none(get_items):

# Arrange
text_type = t.TextType(id=1)
Expand All @@ -58,7 +58,7 @@ def test_should_succeed_when_to_native_returns_none_when_passing_in_none(get_ite
eq_(value,None)


def test_should_succeed_when_to_primitive_returns_an_empty_str_when_passed_in_a_none():
def test_text_type_should_succeed_when_to_primitive_returns_an_empty_str_when_passed_in_a_none():

# Arrange
text_type = t.TextType(id=1)
Expand All @@ -69,7 +69,7 @@ def test_should_succeed_when_to_primitive_returns_an_empty_str_when_passed_in_a_
# Assert
eq_(value,'')

def test_should_succeed_when_to_primitive_returns_str_when_passed_in_an_int_float_or_str():
def test_text_type_should_succeed_when_to_primitive_returns_str_when_passed_in_an_int_float_or_str():

# Arrange
text_type = t.TextType(id=1)
Expand All @@ -79,8 +79,69 @@ def test_should_succeed_when_to_primitive_returns_str_when_passed_in_an_int_floa
float_value = text_type.to_primitive(1.0)
str_value = text_type.to_primitive("text")


# Assert
eq_(int_value,'1')
eq_(float_value,'1.0')
eq_(str_value,'text')


def test_number_type_should_succeed_when_to_native_returns_an_int_or_float_when_passed_a_numbervalue_value_with_api_data():
# Arrange
number_type = t.NumberType(id='number_1')
column_value = cv.create_column_value(ColumnType.numbers, id='number_1', value=json.dumps(1))

# Act
int_value = number_type.to_native(column_value)

# Assert
eq_(int_value, 1)


def test_number_type_should_succeed_when_to_native_returns_a_int_or_float_when_passed_a_int_or_float_value():
# Arrange
number_type = t.NumberType(id=1)

# Act

int_value = number_type.to_native(1)
float_value = number_type.to_native(1.0)

# Assert
eq_(int_value,1)
eq_(float_value,1.0)


def test_number_type_should_succeed_when_to_native_returns_a_none_when_passed_a_none():
# Arrange
number_type = t.NumberType(id=1)

# Act

value = number_type.to_native(None)

# Assert
eq_(value,None)


def test_number_type_should_succeed_when_to_primitive_returns_empty_str_when_passed_a_none():
# Arrange
number_type = t.NumberType(id=1)

# Act
value = number_type.to_primitive(None)

# Assert
eq_(value,'')


def test_number_type_should_succeed_when_to_primitive_returns_export_string_when_passed_a_int_or_float_value():
# Arrange
number_type = t.NumberType(id=1)

# Act
int_value = number_type.to_primitive(1)
float_value = number_type.to_primitive(1.0)

# Assert
eq_(int_value,'1')
eq_(float_value,'1.0')

0 comments on commit 050e09d

Please sign in to comment.