Paul Klimov
7 years ago
13 changed files with 0 additions and 5405 deletions
@ -1,313 +0,0 @@ |
|||||||
IF OBJECT_ID('[dbo].[order_item]', 'U') IS NOT NULL DROP TABLE [dbo].[order_item]; |
|
||||||
IF OBJECT_ID('[dbo].[order_item_with_null_fk]', 'U') IS NOT NULL DROP TABLE [dbo].[order_item_with_null_fk]; |
|
||||||
IF OBJECT_ID('[dbo].[item]', 'U') IS NOT NULL DROP TABLE [dbo].[item]; |
|
||||||
IF OBJECT_ID('[dbo].[order]', 'U') IS NOT NULL DROP TABLE [dbo].[order]; |
|
||||||
IF OBJECT_ID('[dbo].[order_with_null_fk]', 'U') IS NOT NULL DROP TABLE [dbo].[order_with_null_fk]; |
|
||||||
IF OBJECT_ID('[dbo].[category]', 'U') IS NOT NULL DROP TABLE [dbo].[category]; |
|
||||||
IF OBJECT_ID('[dbo].[customer]', 'U') IS NOT NULL DROP TABLE [dbo].[customer]; |
|
||||||
IF OBJECT_ID('[dbo].[profile]', 'U') IS NOT NULL DROP TABLE [dbo].[profile]; |
|
||||||
IF OBJECT_ID('[dbo].[type]', 'U') IS NOT NULL DROP TABLE [dbo].[type]; |
|
||||||
IF OBJECT_ID('[dbo].[null_values]', 'U') IS NOT NULL DROP TABLE [dbo].[null_values]; |
|
||||||
IF OBJECT_ID('[dbo].[negative_default_values]', 'U') IS NOT NULL DROP TABLE [dbo].[negative_default_values]; |
|
||||||
IF OBJECT_ID('[dbo].[animal]', 'U') IS NOT NULL DROP TABLE [dbo].[animal]; |
|
||||||
IF OBJECT_ID('[dbo].[default_pk]', 'U') IS NOT NULL DROP TABLE [dbo].[default_pk]; |
|
||||||
IF OBJECT_ID('[dbo].[document]', 'U') IS NOT NULL DROP TABLE [dbo].[document]; |
|
||||||
IF OBJECT_ID('[dbo].[dossier]', 'U') IS NOT NULL DROP TABLE [dbo].[dossier]; |
|
||||||
IF OBJECT_ID('[dbo].[employee]', 'U') IS NOT NULL DROP TABLE [dbo].[employee]; |
|
||||||
IF OBJECT_ID('[dbo].[department]', 'U') IS NOT NULL DROP TABLE [dbo].[department]; |
|
||||||
IF OBJECT_ID('[dbo].[animal_view]', 'V') IS NOT NULL DROP VIEW [dbo].[animal_view]; |
|
||||||
IF OBJECT_ID('[T_constraints_4]', 'U') IS NOT NULL DROP TABLE [T_constraints_4]; |
|
||||||
IF OBJECT_ID('[T_constraints_3]', 'U') IS NOT NULL DROP TABLE [T_constraints_3]; |
|
||||||
IF OBJECT_ID('[T_constraints_2]', 'U') IS NOT NULL DROP TABLE [T_constraints_2]; |
|
||||||
IF OBJECT_ID('[T_constraints_1]', 'U') IS NOT NULL DROP TABLE [T_constraints_1]; |
|
||||||
IF OBJECT_ID('[T_upsert]', 'U') IS NOT NULL DROP TABLE [T_upsert]; |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[profile] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[description] [varchar](128) NOT NULL, |
|
||||||
CONSTRAINT [PK_profile] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[customer] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[email] [varchar](128) NOT NULL, |
|
||||||
[name] [varchar](128), |
|
||||||
[address] [text], |
|
||||||
[status] [int] DEFAULT 0, |
|
||||||
[profile_id] [int], |
|
||||||
CONSTRAINT [PK_customer] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[category] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[name] [varchar](128) NOT NULL, |
|
||||||
CONSTRAINT [PK_category] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[item] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[name] [varchar](128) NOT NULL, |
|
||||||
[category_id] [int] NOT NULL, |
|
||||||
CONSTRAINT [PK_item] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[order] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[customer_id] [int] NOT NULL, |
|
||||||
[created_at] [int] NOT NULL, |
|
||||||
[total] [decimal](10,0) NOT NULL, |
|
||||||
CONSTRAINT [PK_order] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[order_with_null_fk] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[customer_id] [int] , |
|
||||||
[created_at] [int] NOT NULL, |
|
||||||
[total] [decimal](10,0) NOT NULL, |
|
||||||
CONSTRAINT [PK_order_with_null_fk] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[order_item] ( |
|
||||||
[order_id] [int] NOT NULL, |
|
||||||
[item_id] [int] NOT NULL, |
|
||||||
[quantity] [int] NOT NULL, |
|
||||||
[subtotal] [decimal](10,0) NOT NULL, |
|
||||||
CONSTRAINT [PK_order_item] PRIMARY KEY CLUSTERED ( |
|
||||||
[order_id] ASC, |
|
||||||
[item_id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
|
|
||||||
);CREATE TABLE [dbo].[order_item_with_null_fk] ( |
|
||||||
[order_id] [int], |
|
||||||
[item_id] [int], |
|
||||||
[quantity] [int] NOT NULL, |
|
||||||
[subtotal] [decimal](10,0) NOT NULL |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[null_values] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
var1 [int] NULL, |
|
||||||
var2 [int] NULL, |
|
||||||
var3 [int] DEFAULT NULL, |
|
||||||
stringcol [varchar](32) DEFAULT NULL, |
|
||||||
PRIMARY KEY (id) |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[negative_default_values] ( |
|
||||||
[tinyint_col] [tinyint] DEFAULT '-123', |
|
||||||
[smallint_col] [tinyint] DEFAULT '-123', |
|
||||||
[int_col] [smallint] DEFAULT '-123', |
|
||||||
[bigint_col] [int] DEFAULT '-123', |
|
||||||
[float_col] [float] DEFAULT '-12345.6789', |
|
||||||
[numeric_col] [decimal](5,2) DEFAULT '-33.22' |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[type] ( |
|
||||||
[int_col] [int] NOT NULL, |
|
||||||
[int_col2] [int] DEFAULT '1', |
|
||||||
[tinyint_col] [tinyint] DEFAULT '1', |
|
||||||
[smallint_col] [smallint] DEFAULT '1', |
|
||||||
[char_col] [char](100) NOT NULL, |
|
||||||
[char_col2] [varchar](100) DEFAULT 'something', |
|
||||||
[char_col3] [text], |
|
||||||
[float_col] [decimal](4,3) NOT NULL, |
|
||||||
[float_col2] [float] DEFAULT '1.23', |
|
||||||
[blob_col] [varbinary](MAX), |
|
||||||
[numeric_col] [decimal](5,2) DEFAULT '33.22', |
|
||||||
[time] [datetime] NOT NULL DEFAULT '2002-01-01 00:00:00', |
|
||||||
[bool_col] [tinyint] NOT NULL, |
|
||||||
[bool_col2] [tinyint] DEFAULT '1' |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[animal] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[type] [varchar](255) NOT NULL, |
|
||||||
CONSTRAINT [PK_animal] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[default_pk] ( |
|
||||||
[id] [int] NOT NULL DEFAULT 5, |
|
||||||
[type] [varchar](255) NOT NULL, |
|
||||||
CONSTRAINT [PK_default_pk] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[document] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[title] [varchar](255) NOT NULL, |
|
||||||
[content] [text], |
|
||||||
[version] [int] NOT NULL DEFAULT 0, |
|
||||||
CONSTRAINT [PK_document_pk] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[department] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[title] [varchar](255) NOT NULL, |
|
||||||
CONSTRAINT [PK_department_pk] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[employee] ( |
|
||||||
[id] [int] NOT NULL, |
|
||||||
[department_id] [int] NOT NULL, |
|
||||||
[first_name] [varchar](255) NOT NULL, |
|
||||||
[last_name] [varchar](255) NOT NULL, |
|
||||||
CONSTRAINT [PK_employee_pk] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC, |
|
||||||
[department_id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[dossier] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[department_id] [int] NOT NULL, |
|
||||||
[employee_id] [int] NOT NULL, |
|
||||||
[summary] [varchar](255) NOT NULL, |
|
||||||
CONSTRAINT [PK_dossier_pk] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
CREATE VIEW [dbo].[animal_view] AS SELECT * FROM [dbo].[animal]; |
|
||||||
|
|
||||||
INSERT INTO [dbo].[animal] (type) VALUES ('yiiunit\data\ar\Cat'); |
|
||||||
INSERT INTO [dbo].[animal] (type) VALUES ('yiiunit\data\ar\Dog'); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[profile] ([description]) VALUES ('profile customer 1'); |
|
||||||
INSERT INTO [dbo].[profile] ([description]) VALUES ('profile customer 3'); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[customer] ([email], [name], [address], [status], [profile_id]) VALUES ('user1@example.com', 'user1', 'address1', 1, 1); |
|
||||||
INSERT INTO [dbo].[customer] ([email], [name], [address], [status]) VALUES ('user2@example.com', 'user2', 'address2', 1); |
|
||||||
INSERT INTO [dbo].[customer] ([email], [name], [address], [status], [profile_id]) VALUES ('user3@example.com', 'user3', 'address3', 2, 2); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[category] ([name]) VALUES ('Books'); |
|
||||||
INSERT INTO [dbo].[category] ([name]) VALUES ('Movies'); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Agile Web Application Development with Yii1.1 and PHP5', 1); |
|
||||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Yii 1.1 Application Development Cookbook', 1); |
|
||||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Ice Age', 2); |
|
||||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Toy Story', 2); |
|
||||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Cars', 2); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (1, 1325282384, 110.0); |
|
||||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (2, 1325334482, 33.0); |
|
||||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (2, 1325502201, 40.0); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (1, 1325282384, 110.0); |
|
||||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (2, 1325334482, 33.0); |
|
||||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (2, 1325502201, 40.0); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 1, 1, 30.0); |
|
||||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 2, 2, 40.0); |
|
||||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 4, 1, 10.0); |
|
||||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 5, 1, 15.0); |
|
||||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 3, 1, 8.0); |
|
||||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (3, 2, 1, 40.0); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 1, 1, 30.0); |
|
||||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 2, 2, 40.0); |
|
||||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 4, 1, 10.0); |
|
||||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 5, 1, 15.0); |
|
||||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 3, 1, 8.0); |
|
||||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (3, 2, 1, 40.0); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[document] ([title], [content], [version]) VALUES ('Yii 2.0 guide', 'This is Yii 2.0 guide', 0); |
|
||||||
|
|
||||||
SET IDENTITY_INSERT [dbo].[department] ON; |
|
||||||
INSERT INTO [dbo].[department] (id, title) VALUES (1, 'IT'); |
|
||||||
INSERT INTO [dbo].[department] (id, title) VALUES (2, 'accounting'); |
|
||||||
SET IDENTITY_INSERT [dbo].[department] OFF; |
|
||||||
|
|
||||||
INSERT INTO [dbo].[employee] (id, department_id, first_name, last_name) VALUES (1, 1, 'John', 'Doe'); |
|
||||||
INSERT INTO [dbo].[employee] (id, department_id, first_name, last_name) VALUES (1, 2, 'Ann', 'Smith'); |
|
||||||
INSERT INTO [dbo].[employee] (id, department_id, first_name, last_name) VALUES (2, 2, 'Will', 'Smith'); |
|
||||||
|
|
||||||
SET IDENTITY_INSERT [dbo].[dossier] ON; |
|
||||||
INSERT INTO [dbo].[dossier] (id, department_id, employee_id, summary) VALUES (1, 1, 1, 'Excellent employee.'); |
|
||||||
INSERT INTO [dbo].[dossier] (id, department_id, employee_id, summary) VALUES (2, 2, 1, 'Brilliant employee.'); |
|
||||||
INSERT INTO [dbo].[dossier] (id, department_id, employee_id, summary) VALUES (3, 2, 2, 'Good employee.'); |
|
||||||
SET IDENTITY_INSERT [dbo].[dossier] OFF; |
|
||||||
|
|
||||||
/* bit test, see https://github.com/yiisoft/yii2/issues/9006 */ |
|
||||||
|
|
||||||
IF OBJECT_ID('[dbo].[bit_values]', 'U') IS NOT NULL DROP TABLE [dbo].[bit_values]; |
|
||||||
|
|
||||||
CREATE TABLE [dbo].[bit_values] ( |
|
||||||
[id] [int] IDENTITY NOT NULL, |
|
||||||
[val] [bit] NOT NULL, |
|
||||||
CONSTRAINT [PK_bit_values] PRIMARY KEY CLUSTERED ( |
|
||||||
[id] ASC |
|
||||||
) ON [PRIMARY] |
|
||||||
); |
|
||||||
|
|
||||||
INSERT INTO [dbo].[bit_values] ([val]) VALUES (0), (1); |
|
||||||
|
|
||||||
CREATE TABLE [T_constraints_1] |
|
||||||
( |
|
||||||
[C_id] INT NOT NULL IDENTITY PRIMARY KEY, |
|
||||||
[C_not_null] INT NOT NULL, |
|
||||||
[C_check] VARCHAR(255) NULL CHECK ([C_check] <> ''), |
|
||||||
[C_unique] INT NOT NULL, |
|
||||||
[C_default] INT NOT NULL DEFAULT 0, |
|
||||||
CONSTRAINT [CN_unique] UNIQUE ([C_unique]) |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [T_constraints_2] |
|
||||||
( |
|
||||||
[C_id_1] INT NOT NULL, |
|
||||||
[C_id_2] INT NOT NULL, |
|
||||||
[C_index_1] INT NULL, |
|
||||||
[C_index_2_1] INT NULL, |
|
||||||
[C_index_2_2] INT NULL, |
|
||||||
CONSTRAINT [CN_constraints_2_multi] UNIQUE ([C_index_2_1], [C_index_2_2]), |
|
||||||
CONSTRAINT [CN_pk] PRIMARY KEY ([C_id_1], [C_id_2]) |
|
||||||
); |
|
||||||
|
|
||||||
CREATE INDEX [CN_constraints_2_single] ON [T_constraints_2] ([C_index_1]); |
|
||||||
|
|
||||||
CREATE TABLE [T_constraints_3] |
|
||||||
( |
|
||||||
[C_id] INT NOT NULL, |
|
||||||
[C_fk_id_1] INT NOT NULL, |
|
||||||
[C_fk_id_2] INT NOT NULL, |
|
||||||
CONSTRAINT [CN_constraints_3] FOREIGN KEY ([C_fk_id_1], [C_fk_id_2]) REFERENCES [T_constraints_2] ([C_id_1], [C_id_2]) ON DELETE CASCADE ON UPDATE CASCADE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [T_constraints_4] |
|
||||||
( |
|
||||||
[C_id] INT NOT NULL IDENTITY PRIMARY KEY, |
|
||||||
[C_col_1] INT NULL, |
|
||||||
[C_col_2] INT NOT NULL, |
|
||||||
CONSTRAINT [CN_constraints_4] UNIQUE ([C_col_1], [C_col_2]) |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE [T_upsert] |
|
||||||
( |
|
||||||
[id] INT NOT NULL IDENTITY PRIMARY KEY, |
|
||||||
[ts] INT NULL, |
|
||||||
[email] VARCHAR(128) NOT NULL UNIQUE, |
|
||||||
[recovery_email] VARCHAR(128) NULL, |
|
||||||
[address] TEXT NULL, |
|
||||||
[status] TINYINT NOT NULL DEFAULT 0, |
|
||||||
[orders] INT NOT NULL DEFAULT 0, |
|
||||||
[profile_id] INT NULL, |
|
||||||
UNIQUE ([email], [recovery_email]) |
|
||||||
); |
|
@ -1,437 +0,0 @@ |
|||||||
/** |
|
||||||
* This is the database schema for testing Oracle support of Yii Active Record. |
|
||||||
*/ |
|
||||||
|
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "composite_fk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order_item"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "item"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order_item_with_null_fk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order_with_null_fk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "category"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "customer"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "profile"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "type"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "null_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "negative_default_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "constraints"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "bool_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "animal"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "default_pk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "document"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "dossier"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "employee"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "department"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP VIEW "animal_view"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "validator_main"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "validator_ref"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "bit_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END; -- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_4"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_3"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_2"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_1"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_upsert"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
|
||||||
|
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "profile_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "customer_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "category_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "item_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "order_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "order_with_null_fk_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "null_values_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "bool_values_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "animal_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "document_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "T_upsert_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "department_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "employee_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
|
||||||
|
|
||||||
/* STATEMENTS */ |
|
||||||
|
|
||||||
CREATE TABLE "constraints" |
|
||||||
( |
|
||||||
"id" integer not null, |
|
||||||
"field1" varchar2(255) |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "profile" ( |
|
||||||
"id" integer not null, |
|
||||||
"description" varchar2(128) NOT NULL, |
|
||||||
CONSTRAINT "profile_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE SEQUENCE "profile_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "customer" ( |
|
||||||
"id" integer not null, |
|
||||||
"email" varchar2(128) NOT NULL UNIQUE, |
|
||||||
"name" varchar2(128), |
|
||||||
"address" varchar(4000), |
|
||||||
"status" integer DEFAULT 0, |
|
||||||
"bool_status" char DEFAULT 0 check ("bool_status" in (0,1)), |
|
||||||
"profile_id" integer, |
|
||||||
CONSTRAINT "customer_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "customer_SEQ"; |
|
||||||
|
|
||||||
comment on column "customer"."email" is 'someone@example.com'; |
|
||||||
|
|
||||||
CREATE TABLE "category" ( |
|
||||||
"id" integer not null, |
|
||||||
"name" varchar2(128) NOT NULL, |
|
||||||
CONSTRAINT "category_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "category_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "item" ( |
|
||||||
"id" integer not null, |
|
||||||
"name" varchar2(128) NOT NULL, |
|
||||||
"category_id" integer NOT NULL references "category"("id") on DELETE CASCADE, |
|
||||||
CONSTRAINT "item_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "item_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "order" ( |
|
||||||
"id" integer not null, |
|
||||||
"customer_id" integer NOT NULL references "customer"("id") on DELETE CASCADE, |
|
||||||
"created_at" integer NOT NULL, |
|
||||||
"total" decimal(10,0) NOT NULL, |
|
||||||
CONSTRAINT "order_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "order_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "order_with_null_fk" ( |
|
||||||
"id" integer not null, |
|
||||||
"customer_id" integer, |
|
||||||
"created_at" integer NOT NULL, |
|
||||||
"total" decimal(10,0) NOT NULL, |
|
||||||
CONSTRAINT "order_with_null_fk_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "order_with_null_fk_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "order_item" ( |
|
||||||
"order_id" integer NOT NULL references "order"("id") on DELETE CASCADE, |
|
||||||
"item_id" integer NOT NULL references "item"("id") on DELETE CASCADE, |
|
||||||
"quantity" integer NOT NULL, |
|
||||||
"subtotal" decimal(10,0) NOT NULL, |
|
||||||
CONSTRAINT "order_item_PK" PRIMARY KEY ("order_id", "item_id") ENABLE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "order_item_with_null_fk" ( |
|
||||||
"order_id" integer, |
|
||||||
"item_id" integer, |
|
||||||
"quantity" integer NOT NULL, |
|
||||||
"subtotal" decimal(10,0) NOT NULL |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "composite_fk" ( |
|
||||||
"id" integer NOT NULL, |
|
||||||
"order_id" integer NOT NULL, |
|
||||||
"item_id" integer NOT NULL, |
|
||||||
CONSTRAINT "composite_fk_PK" PRIMARY KEY ("id") ENABLE, |
|
||||||
CONSTRAINT FK_composite_fk_order_item FOREIGN KEY ("order_id", "item_id") |
|
||||||
REFERENCES "order_item" ("order_id", "item_id") ON DELETE CASCADE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "null_values" ( |
|
||||||
"id" INT NOT NULL, |
|
||||||
"var1" INT NULL, |
|
||||||
"var2" INT NULL, |
|
||||||
"var3" INT DEFAULT NULL, |
|
||||||
"stringcol" varchar2(32) DEFAULT NULL, |
|
||||||
CONSTRAINT "null_values_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "null_values_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "negative_default_values" ( |
|
||||||
"tinyint_col" number(3) default -123, |
|
||||||
"smallint_col" smallint default -123, |
|
||||||
"int_col" integer default -123, |
|
||||||
"bigint_col" integer default -123, |
|
||||||
"float_col" double precision default -12345.6789, |
|
||||||
"numeric_col" decimal(5,2) default -33.22 |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "type" ( |
|
||||||
"int_col" integer NOT NULL, |
|
||||||
"int_col2" integer DEFAULT 1, |
|
||||||
"tinyint_col" number(3) DEFAULT 1, |
|
||||||
"smallint_col" smallint DEFAULT 1, |
|
||||||
"char_col" char(100) NOT NULL, |
|
||||||
"char_col2" varchar2(100) DEFAULT 'something', |
|
||||||
"char_col3" varchar2(4000), |
|
||||||
"float_col" double precision NOT NULL, |
|
||||||
"float_col2" double precision DEFAULT 1.23, |
|
||||||
"blob_col" blob, |
|
||||||
"numeric_col" decimal(5,2) DEFAULT 33.22, |
|
||||||
"time" timestamp DEFAULT to_timestamp('2002-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') NOT NULL, |
|
||||||
"bool_col" char NOT NULL check ("bool_col" in (0,1)), |
|
||||||
"bool_col2" char DEFAULT 1 check("bool_col2" in (0,1)), |
|
||||||
"ts_default" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, |
|
||||||
"bit_col" char(3) DEFAULT 130 NOT NULL |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "bool_values" ( |
|
||||||
"id" integer not null, |
|
||||||
"bool_col" char check ("bool_col" in (0,1)), |
|
||||||
"default_true" char default 1 not null check ("default_true" in (0,1)), |
|
||||||
"default_false" char default 0 not null check ("default_false" in (0,1)), |
|
||||||
CONSTRAINT "bool_values_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "bool_values_SEQ"; |
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE "animal" ( |
|
||||||
"id" integer, |
|
||||||
"type" varchar2(255) not null, |
|
||||||
CONSTRAINT "animal_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "animal_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "default_pk" ( |
|
||||||
"id" integer default 5 not null, |
|
||||||
"type" varchar2(255) not null, |
|
||||||
CONSTRAINT "default_pk_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "document" ( |
|
||||||
"id" integer, |
|
||||||
"title" varchar2(255) not null, |
|
||||||
"content" varchar(4000), |
|
||||||
"version" integer default 0 not null, |
|
||||||
CONSTRAINT "document_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "document_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "department" ( |
|
||||||
"id" INTEGER NOT NULL, |
|
||||||
"title" varchar2(255) not null, |
|
||||||
CONSTRAINT "department_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "department_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "employee" ( |
|
||||||
"id" INTEGER NOT NULL, |
|
||||||
"department_id" INTEGER NOT NULL, |
|
||||||
"first_name" varchar2(255) not null, |
|
||||||
"last_name" varchar2(255) not null, |
|
||||||
CONSTRAINT "employee_PK" PRIMARY KEY ("id", "department_id") ENABLE |
|
||||||
); |
|
||||||
CREATE SEQUENCE "employee_SEQ"; |
|
||||||
|
|
||||||
CREATE TABLE "dossier" ( |
|
||||||
"id" INTEGER NOT NULL, |
|
||||||
"department_id" INTEGER NOT NULL, |
|
||||||
"employee_id" INTEGER NOT NULL, |
|
||||||
"summary" varchar2(255) not null, |
|
||||||
CONSTRAINT "dossier_PK" PRIMARY KEY ("id", "department_id") ENABLE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE VIEW "animal_view" AS SELECT * FROM "animal"; |
|
||||||
|
|
||||||
CREATE TABLE "bit_values" ( |
|
||||||
"id" integer not null, |
|
||||||
"val" char(1) NOT NULL, |
|
||||||
CONSTRAINT "bit_values_PK" PRIMARY KEY ("id") ENABLE, |
|
||||||
CONSTRAINT "bit_values_val" CHECK ("val" IN ('1','0')) |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "T_constraints_1" |
|
||||||
( |
|
||||||
"C_id" INT NOT NULL PRIMARY KEY, |
|
||||||
"C_not_null" INT NOT NULL, |
|
||||||
"C_check" VARCHAR(255) NULL CHECK ("C_check" <> ''), |
|
||||||
"C_unique" INT NOT NULL, |
|
||||||
"C_default" INT DEFAULT 0 NOT NULL, |
|
||||||
CONSTRAINT "CN_unique" UNIQUE ("C_unique") |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "T_constraints_2" |
|
||||||
( |
|
||||||
"C_id_1" INT NOT NULL, |
|
||||||
"C_id_2" INT NOT NULL, |
|
||||||
"C_index_1" INT NULL, |
|
||||||
"C_index_2_1" INT NULL, |
|
||||||
"C_index_2_2" INT NULL, |
|
||||||
CONSTRAINT "CN_constraints_2_multi" UNIQUE ("C_index_2_1", "C_index_2_2"), |
|
||||||
CONSTRAINT "CN_pk" PRIMARY KEY ("C_id_1", "C_id_2") |
|
||||||
); |
|
||||||
|
|
||||||
CREATE INDEX "CN_constraints_2_single" ON "T_constraints_2" ("C_index_1"); |
|
||||||
|
|
||||||
CREATE TABLE "T_constraints_3" |
|
||||||
( |
|
||||||
"C_id" INT NOT NULL, |
|
||||||
"C_fk_id_1" INT NOT NULL, |
|
||||||
"C_fk_id_2" INT NOT NULL, |
|
||||||
CONSTRAINT "CN_constraints_3" FOREIGN KEY ("C_fk_id_1", "C_fk_id_2") REFERENCES "T_constraints_2" ("C_id_1", "C_id_2") ON DELETE CASCADE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "T_constraints_4" |
|
||||||
( |
|
||||||
"C_id" INT NOT NULL PRIMARY KEY, |
|
||||||
"C_col_1" INT NULL, |
|
||||||
"C_col_2" INT NOT NULL, |
|
||||||
CONSTRAINT "CN_constraints_4" UNIQUE ("C_col_1", "C_col_2") |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "T_upsert" |
|
||||||
( |
|
||||||
"id" INT NOT NULL PRIMARY KEY, |
|
||||||
"ts" INT NULL, |
|
||||||
"email" VARCHAR(128) NOT NULL UNIQUE, |
|
||||||
"recovery_email" VARCHAR(128) NULL, |
|
||||||
"address" CLOB NULL, |
|
||||||
"status" NUMBER(5,0) DEFAULT 0 NOT NULL, |
|
||||||
"orders" INT DEFAULT 0 NOT NULL, |
|
||||||
"profile_id" INT NULL, |
|
||||||
CONSTRAINT "CN_T_upsert_multi" UNIQUE ("email", "recovery_email") |
|
||||||
); |
|
||||||
CREATE SEQUENCE "T_upsert_SEQ"; |
|
||||||
|
|
||||||
/** |
|
||||||
* (Postgres-)Database Schema for validator tests |
|
||||||
*/ |
|
||||||
|
|
||||||
CREATE TABLE "validator_main" ( |
|
||||||
"id" integer not null, |
|
||||||
"field1" varchar2(255), |
|
||||||
CONSTRAINT "validator_main_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
|
|
||||||
CREATE TABLE "validator_ref" ( |
|
||||||
"id" integer not null, |
|
||||||
"a_field" varchar2(255), |
|
||||||
"ref" integer, |
|
||||||
CONSTRAINT "validator_ref_PK" PRIMARY KEY ("id") ENABLE |
|
||||||
); |
|
||||||
|
|
||||||
/* TRIGGERS */ |
|
||||||
|
|
||||||
CREATE TRIGGER "profile_TRG" BEFORE INSERT ON "profile" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "profile_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "customer_TRG" BEFORE INSERT ON "customer" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "customer_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "category_TRG" BEFORE INSERT ON "category" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "category_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "item_TRG" BEFORE INSERT ON "item" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "item_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "order_TRG" BEFORE INSERT ON "order" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "order_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "order_with_null_fk_TRG" BEFORE INSERT ON "order_with_null_fk" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "order_with_null_fk_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "null_values_TRG" BEFORE INSERT ON "null_values" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "null_values_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "bool_values_TRG" BEFORE INSERT ON "bool_values" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "bool_values_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "animal_TRG" BEFORE INSERT ON "animal" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "animal_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "document_TRG" BEFORE INSERT ON "document" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "document_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
CREATE TRIGGER "T_upsert_TRG" BEFORE INSERT ON "T_upsert" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
|
||||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "T_upsert_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
|
||||||
END COLUMN_SEQUENCES; |
|
||||||
END; |
|
||||||
/ |
|
||||||
|
|
||||||
/* TRIGGERS */ |
|
||||||
|
|
||||||
INSERT INTO "animal" ("type") VALUES ('yiiunit\data\ar\Cat'); |
|
||||||
INSERT INTO "animal" ("type") VALUES ('yiiunit\data\ar\Dog'); |
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO "profile" ("description") VALUES ('profile customer 1'); |
|
||||||
INSERT INTO "profile" ("description") VALUES ('profile customer 3'); |
|
||||||
|
|
||||||
INSERT INTO "customer" ("email", "name", "address", "status", "bool_status", "profile_id") VALUES ('user1@example.com', 'user1', 'address1', 1, 1, 1); |
|
||||||
INSERT INTO "customer" ("email", "name", "address", "status", "bool_status") VALUES ('user2@example.com', 'user2', 'address2', 1, 1); |
|
||||||
INSERT INTO "customer" ("email", "name", "address", "status", "bool_status", "profile_id") VALUES ('user3@example.com', 'user3', 'address3', 2, 0, 2); |
|
||||||
|
|
||||||
INSERT INTO "category" ("name") VALUES ('Books'); |
|
||||||
INSERT INTO "category" ("name") VALUES ('Movies'); |
|
||||||
|
|
||||||
INSERT INTO "item" ("name", "category_id") VALUES ('Agile Web Application Development with Yii1.1 and PHP5', 1); |
|
||||||
INSERT INTO "item" ("name", "category_id") VALUES ('Yii 1.1 Application Development Cookbook', 1); |
|
||||||
INSERT INTO "item" ("name", "category_id") VALUES ('Ice Age', 2); |
|
||||||
INSERT INTO "item" ("name", "category_id") VALUES ('Toy Story', 2); |
|
||||||
INSERT INTO "item" ("name", "category_id") VALUES ('Cars', 2); |
|
||||||
|
|
||||||
INSERT INTO "order" ("customer_id", "created_at", "total") VALUES (1, 1325282384, 110.0); |
|
||||||
INSERT INTO "order" ("customer_id", "created_at", "total") VALUES (2, 1325334482, 33.0); |
|
||||||
INSERT INTO "order" ("customer_id", "created_at", "total") VALUES (2, 1325502201, 40.0); |
|
||||||
|
|
||||||
INSERT INTO "order_with_null_fk" ("customer_id", "created_at", "total") VALUES (1, 1325282384, 110.0); |
|
||||||
INSERT INTO "order_with_null_fk" ("customer_id", "created_at", "total") VALUES (2, 1325334482, 33.0); |
|
||||||
INSERT INTO "order_with_null_fk" ("customer_id", "created_at", "total") VALUES (2, 1325502201, 40.0); |
|
||||||
|
|
||||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 1, 1, 30.0); |
|
||||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 2, 2, 40.0); |
|
||||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 4, 1, 10.0); |
|
||||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 5, 1, 15.0); |
|
||||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 3, 1, 8.0); |
|
||||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (3, 2, 1, 40.0); |
|
||||||
|
|
||||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 1, 1, 30.0); |
|
||||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 2, 2, 40.0); |
|
||||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 4, 1, 10.0); |
|
||||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 5, 1, 15.0); |
|
||||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 3, 1, 8.0); |
|
||||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (3, 2, 1, 40.0); |
|
||||||
|
|
||||||
INSERT INTO "document" ("title", "content", "version") VALUES ('Yii 2.0 guide', 'This is Yii 2.0 guide', 0); |
|
||||||
|
|
||||||
INSERT INTO "department" ("id", "title") VALUES (1, 'IT'); |
|
||||||
INSERT INTO "department" ("id", "title") VALUES (2, 'accounting'); |
|
||||||
|
|
||||||
INSERT INTO "employee" ("id", "department_id", "first_name", "last_name") VALUES (1, 1, 'John', 'Doe'); |
|
||||||
INSERT INTO "employee" ("id", "department_id", "first_name", "last_name") VALUES (1, 2, 'Ann', 'Smith'); |
|
||||||
INSERT INTO "employee" ("id", "department_id", "first_name", "last_name") VALUES (2, 2, 'Will', 'Smith'); |
|
||||||
|
|
||||||
INSERT INTO "dossier" ("id", "department_id", "employee_id", "summary") VALUES (1, 1, 1, 'Excellent employee.'); |
|
||||||
INSERT INTO "dossier" ("id", "department_id", "employee_id", "summary") VALUES (2, 2, 1, 'Brilliant employee.'); |
|
||||||
INSERT INTO "dossier" ("id", "department_id", "employee_id", "summary") VALUES (3, 2, 2, 'Good employee.'); |
|
||||||
|
|
||||||
INSERT INTO "validator_main" ("id", "field1") VALUES (1, 'just a string1'); |
|
||||||
INSERT INTO "validator_main" ("id", "field1") VALUES (2, 'just a string2'); |
|
||||||
INSERT INTO "validator_main" ("id", "field1") VALUES (3, 'just a string3'); |
|
||||||
INSERT INTO "validator_main" ("id", "field1") VALUES (4, 'just a string4'); |
|
||||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (1, 'ref_to_2', 2); |
|
||||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (2, 'ref_to_2', 2); |
|
||||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (3, 'ref_to_3', 3); |
|
||||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (4, 'ref_to_4', 4); |
|
||||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (5, 'ref_to_4', 4); |
|
||||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (6, 'ref_to_5', 5); |
|
||||||
|
|
||||||
INSERT INTO "bit_values" ("id", "val") |
|
||||||
SELECT 1, '0' FROM SYS.DUAL |
|
||||||
UNION ALL SELECT 2, '1' FROM SYS.DUAL; |
|
@ -1,3 +0,0 @@ |
|||||||
<form id="w0"> |
|
||||||
<input id="name" type="text" name="name" value=""> |
|
||||||
</form> |
|
@ -1,170 +0,0 @@ |
|||||||
<!-- Filters for testing of multiple grid views --> |
|
||||||
|
|
||||||
<div id="w-common-filters"> |
|
||||||
<input name="PostSearch[id]" type="text"> |
|
||||||
<input name="PostSearch[name]" type="text"> |
|
||||||
</div> |
|
||||||
|
|
||||||
<!-- The main setup --> |
|
||||||
|
|
||||||
<div id="w0" class="grid-view"> |
|
||||||
<table> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th><input id="w0-check-all" name="selection_all" value="1" type="checkbox"></th> |
|
||||||
<th>Name</th> |
|
||||||
<th>Category</th> |
|
||||||
<th>Tags</th> |
|
||||||
</tr> |
|
||||||
<tr id="w0-filters"> |
|
||||||
<td> </td> |
|
||||||
<td><input id="w0-name" name="PostSearch[name]" type="text"></td> |
|
||||||
<td> |
|
||||||
<select id="w0-category" name="PostSearch[category_id]"> |
|
||||||
<option value="" selected>None</option> |
|
||||||
<option value="1">Programming</option> |
|
||||||
<option value="2">Traveling</option> |
|
||||||
</select> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<select id="w0-tags" name="PostSearch[tags][]" multiple> |
|
||||||
<option value="1">html</option> |
|
||||||
<option value="2">css</option> |
|
||||||
<option value="3">js</option> |
|
||||||
<option value="4">php</option> |
|
||||||
</select> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<tr data-key="1"> |
|
||||||
<td><input class="w0-check-row" name="selection[]" value="1" type="checkbox"></td> |
|
||||||
<td>Name 1</td> |
|
||||||
<td>Programming</td> |
|
||||||
<td>html, css</td> |
|
||||||
</tr> |
|
||||||
<tr data-key="2"> |
|
||||||
<td><input class="w0-check-row" name="selection[]" value="2" type="checkbox"></td> |
|
||||||
<td>Name 2</td> |
|
||||||
<td>Programming</td> |
|
||||||
<td>js</td> |
|
||||||
</tr> |
|
||||||
<tr data-key="3"> |
|
||||||
<td><input class="w0-check-row" name="selection[]" value="3" type="checkbox"></td> |
|
||||||
<td>Name 3</td> |
|
||||||
<td>Programming</td> |
|
||||||
<td>php</td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
|
|
||||||
<!-- The basic setup, used for testing of multiple grid views --> |
|
||||||
|
|
||||||
<div id="w1" class="grid-view"> |
|
||||||
<table> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th><input name="selection_all" value="1" type="checkbox"></th> |
|
||||||
<th>ID</th> |
|
||||||
<th>Name</th> |
|
||||||
</tr> |
|
||||||
<tr id="w1-filters"> |
|
||||||
<td> </td> |
|
||||||
<td><input name="PostSearch[id]" type="text"></td> |
|
||||||
<td><input name="PostSearch[name]" type="text"></td> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<tr data-key="1"> |
|
||||||
<td><input name="selection[]" value="1" type="checkbox"></td> |
|
||||||
<td>1</td> |
|
||||||
<td>Name 1</td> |
|
||||||
</tr> |
|
||||||
<tr data-key="2"> |
|
||||||
<td><input name="selection[]" value="2" type="checkbox"></td> |
|
||||||
<td>2</td> |
|
||||||
<td>Name 2</td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
|
|
||||||
<!-- https://github.com/yiisoft/yii2/pull/10284 --> |
|
||||||
|
|
||||||
<div id="w2"> |
|
||||||
<table> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th>Name</th> |
|
||||||
<th>Tags</th> |
|
||||||
</tr> |
|
||||||
<tr id="w2-filters"> |
|
||||||
<td><input name="PostSearch[name]" type="text"></td> |
|
||||||
<td> |
|
||||||
<input type="hidden" name="PostSearch[tags]" value="-1"> |
|
||||||
<select id="w2-tags" name="PostSearch[tags][]" multiple> |
|
||||||
<option value="1">html</option> |
|
||||||
<option value="2">css</option> |
|
||||||
<option value="3">js</option> |
|
||||||
<option value="4">php</option> |
|
||||||
</select> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<tr data-key="1"> |
|
||||||
<td>Name 1</td> |
|
||||||
<td>html, css</td> |
|
||||||
</tr> |
|
||||||
<tr data-key="2"> |
|
||||||
<td>Name 2</td> |
|
||||||
<td>js</td> |
|
||||||
</tr> |
|
||||||
<tr data-key="3"> |
|
||||||
<td>Name 3</td> |
|
||||||
<td>php</td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
|
|
||||||
<!-- Setup for testing that event handlers are correctly removed with new selectors --> |
|
||||||
|
|
||||||
<div id="w3"> |
|
||||||
<table> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th> |
|
||||||
<input name="selection_all" value="1" type="checkbox"> |
|
||||||
<input name="selection_all2" value="1" type="checkbox"> |
|
||||||
</th> |
|
||||||
<th>ID</th> |
|
||||||
<th>Name</th> |
|
||||||
</tr> |
|
||||||
<tr id="w3-filters"> |
|
||||||
<td> </td> |
|
||||||
<td><input name="PostSearch[id]" type="text"></td> |
|
||||||
<td><input name="PostSearch[name]" type="text"></td> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<tr data-key="1"> |
|
||||||
<td> |
|
||||||
<input class="w3-check-row" name="selection[]" value="1" type="checkbox"> |
|
||||||
<input name="selection2[]" value="1" type="checkbox"> |
|
||||||
</td> |
|
||||||
<td>1</td> |
|
||||||
<td>Name 1</td> |
|
||||||
</tr> |
|
||||||
<tr data-key="2"> |
|
||||||
<td> |
|
||||||
<input class="w3-check-row" name="selection[]" value="2" type="checkbox"> |
|
||||||
<input name="selection2[]" value="2" type="checkbox"> |
|
||||||
</td> |
|
||||||
<td>2</td> |
|
||||||
<td>Name 2</td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
@ -1,194 +0,0 @@ |
|||||||
<!doctype html> |
|
||||||
<html> |
|
||||||
<head> |
|
||||||
<meta charset="utf-8"> |
|
||||||
<meta name="csrf-param" content="_csrf"> |
|
||||||
<meta name="csrf-token" content="foobar"> |
|
||||||
</head> |
|
||||||
<body id="body"> |
|
||||||
<div class="csrf"> |
|
||||||
<form id="form1"> |
|
||||||
<input name="_csrf" value="" type="hidden"> |
|
||||||
</form> |
|
||||||
|
|
||||||
<form id="form2"> |
|
||||||
<input name="_csrf" value="" type="hidden"> |
|
||||||
</form> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="handle-action"> |
|
||||||
<!-- The rest of pjax related attributes are set using JS to prevent copy pasting and for better readability --> |
|
||||||
|
|
||||||
<div class="no-method"> |
|
||||||
<div class="invalid"> |
|
||||||
<div class="no-form"> |
|
||||||
<a class="link-no-href"></a> |
|
||||||
<a class="link-empty-href" href=""></a> |
|
||||||
<a class="link-anchor-href" href="#"></a> |
|
||||||
|
|
||||||
<a class="link-no-href-pjax" data-pjax></a> |
|
||||||
<a class="link-empty-href-pjax" href="" data-pjax></a> |
|
||||||
<a class="link-anchor-href-pjax" href="#" data-pjax></a> |
|
||||||
|
|
||||||
<input class="not-submit-no-form" type="text"> |
|
||||||
<input class="submit-no-form" type="submit"> |
|
||||||
<button class="submit-form-not-exist" data-form="not-existing-form"></button> |
|
||||||
|
|
||||||
<input class="not-submit-no-form-pjax" type="text" data-pjax> |
|
||||||
<input class="submit-no-form-pjax" type="submit" data-pjax> |
|
||||||
<button class="submit-form-not-exist-pjax" data-form="not-existing-form" data-pjax></button> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="form"> |
|
||||||
<form id="not-submit-separate-form"> |
|
||||||
<input name="query" value="a"> |
|
||||||
</form> |
|
||||||
|
|
||||||
<button class="not-submit-outside-form" type="button" data-form="not-submit-separate-form"></button> |
|
||||||
<form id="not-submit-parent-form"> |
|
||||||
<input class="not-submit-inside-form" type="reset"> |
|
||||||
</form> |
|
||||||
|
|
||||||
<button class="not-submit-outside-form-pjax" |
|
||||||
type="button" |
|
||||||
data-form="not-submit-separate-form" |
|
||||||
data-pjax></button> |
|
||||||
<form id="not-submit-parent-form-pjax"> |
|
||||||
<input class="not-submit-inside-form-pjax" type="reset" data-pjax> |
|
||||||
</form> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="valid"> |
|
||||||
<a class="link" href="/tests/index"></a> |
|
||||||
<a class="link-pjax-0" href="/tests/index" data-pjax="0"></a> |
|
||||||
|
|
||||||
<a class="link-pjax" href="/tests/index" data-pjax></a> |
|
||||||
<a class="link-pjax-1" href="/tests/index" data-pjax="1"></a> |
|
||||||
<a class="link-pjax-true" href="/tests/index" data-pjax="true"></a> |
|
||||||
|
|
||||||
<div id="pjax-separate-container"></div> |
|
||||||
<a class="link-pjax-outside-container" |
|
||||||
href="/tests/index" |
|
||||||
data-pjax |
|
||||||
data-pjax-container="#pjax-separate-container"></a> |
|
||||||
|
|
||||||
<div id="pjax-container-1" data-pjax-container> |
|
||||||
<div id="pjax-container-2" data-pjax-container> |
|
||||||
<a class="link-pjax-inside-container" href="/tests/index" data-pjax></a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<form id="submit-separate-form"> |
|
||||||
<input name="query" value="a"> |
|
||||||
</form> |
|
||||||
|
|
||||||
<input class="submit-outside-form" type="submit" data-form="submit-separate-form"> |
|
||||||
<form id="submit-parent-form"> |
|
||||||
<button class="submit-inside-form"></button> |
|
||||||
</form> |
|
||||||
|
|
||||||
<input class="submit-outside-form-pjax" type="submit" data-form="submit-separate-form" data-pjax> |
|
||||||
|
|
||||||
<form id="submit-parent-form-pjax"> |
|
||||||
<button class="submit-inside-form-pjax" data-pjax></button> |
|
||||||
</form> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="method"> |
|
||||||
<div class="no-form"> |
|
||||||
<a class="bad-href" href="#" data-method="get"></a> |
|
||||||
<a class="bad-params" href="/tests/index" data-method="get" data-params="{'foo':'1','bar':'2'}"></a> |
|
||||||
|
|
||||||
<a class="get-params-target" |
|
||||||
href="/tests/index" |
|
||||||
target="_blank" |
|
||||||
data-method="get" |
|
||||||
data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
<a class="head" href="/tests/index" data-method="head" data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
<a class="post" href="/tests/index" data-method="post" data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
<a class="post-upper-case" href="/tests/index" data-method="POST" data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
<a class="put" href="/tests/index" data-method="put" data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
|
|
||||||
<a class="get-params-pjax" |
|
||||||
href="/tests/index" |
|
||||||
data-method="get" |
|
||||||
data-params='{"foo":"1","bar":"2"}' |
|
||||||
data-pjax></a> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="form"> |
|
||||||
<a class="new-action-new-method" |
|
||||||
href="/search" |
|
||||||
data-method="post" |
|
||||||
data-form="method-form" |
|
||||||
data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
<a class="same-action-same-method" |
|
||||||
href="/tests/search" |
|
||||||
data-method="get" |
|
||||||
data-form="method-form" |
|
||||||
data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
<a class="bad-action-new-method" |
|
||||||
href="#" |
|
||||||
data-method="post" |
|
||||||
data-form="method-form" |
|
||||||
data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
|
|
||||||
<form id="method-form" method="get" action="/tests/search"> |
|
||||||
<input name="query" value="a"> |
|
||||||
</form> |
|
||||||
|
|
||||||
<!-- https://github.com/yiisoft/yii2/pull/8014 --> |
|
||||||
|
|
||||||
<a class="hidden-method-action" |
|
||||||
href="/tests/search" |
|
||||||
data-method="get" |
|
||||||
data-form="form-hidden-method-action" |
|
||||||
data-params='{"foo":"1","bar":"2"}'></a> |
|
||||||
|
|
||||||
<form id="form-hidden-method-action" method="get" action="/tests/search"> |
|
||||||
<input name="query" value="a"> |
|
||||||
<input name="method" value="b" type="hidden"> |
|
||||||
<input name="action" value="c" type="hidden"> |
|
||||||
</form> |
|
||||||
|
|
||||||
<a class="new-action-new-method-pjax" |
|
||||||
href="/search" |
|
||||||
data-method="post" |
|
||||||
data-form="method-form" |
|
||||||
data-params='{"foo":"1","bar":"2"}' |
|
||||||
data-pjax></a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="data-methods"> |
|
||||||
<a id="data-methods-no-data" class="data-methods-element" href="/tests/index"></a> |
|
||||||
<a id="data-methods-click-confirm" |
|
||||||
class="data-methods-element" |
|
||||||
href="/tests/index" |
|
||||||
data-confirm="Are you sure?"></a> |
|
||||||
<form> |
|
||||||
<select id="data-methods-change" class="data-methods-element" data-method="get"> |
|
||||||
<option value="1">html</option> |
|
||||||
<option value="2">css</option> |
|
||||||
</select> |
|
||||||
</form> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="asset-filters"> |
|
||||||
<div class="scripts"> |
|
||||||
<script src="/js/existing1.js"></script> |
|
||||||
<!-- To test correct work with absolute urls --> |
|
||||||
<script src="http://foo.bar/js/existing2.js"></script> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="stylesheets"> |
|
||||||
<link id="stylesheet1" href="/css/stylesheet1.css" rel="stylesheet"> |
|
||||||
<!-- To test correct work with absolute urls --> |
|
||||||
<link id="stylesheet2" href="http://foo.bar/css/stylesheet2.css" rel="stylesheet"> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,162 +0,0 @@ |
|||||||
var assert = require('chai').assert; |
|
||||||
var sinon; |
|
||||||
var jsdom = require('mocha-jsdom'); |
|
||||||
|
|
||||||
var fs = require('fs'); |
|
||||||
var vm = require('vm'); |
|
||||||
|
|
||||||
describe('yii.activeForm', function () { |
|
||||||
var yiiActiveFormPath = 'framework/jquery/assets/yii.activeForm.js'; |
|
||||||
var yiiPath = 'framework/jquery/assets/yii.js'; |
|
||||||
var jQueryPath = 'vendor/bower-asset/jquery/dist/jquery.js'; |
|
||||||
var $; |
|
||||||
var $activeForm; |
|
||||||
|
|
||||||
function registerYii() { |
|
||||||
var code = fs.readFileSync(yiiPath); |
|
||||||
var script = new vm.Script(code); |
|
||||||
var sandbox = {window: window, jQuery: $}; |
|
||||||
var context = new vm.createContext(sandbox); |
|
||||||
script.runInContext(context); |
|
||||||
return sandbox.window.yii; |
|
||||||
} |
|
||||||
|
|
||||||
function registerTestableCode() { |
|
||||||
var yii = registerYii(); |
|
||||||
var code = fs.readFileSync(yiiActiveFormPath); |
|
||||||
var script = new vm.Script(code); |
|
||||||
var context = new vm.createContext({window: window, document: window.document, yii: yii}); |
|
||||||
script.runInContext(context); |
|
||||||
} |
|
||||||
|
|
||||||
var activeFormHtml = fs.readFileSync('tests/js/data/yii.activeForm.html', 'utf-8'); |
|
||||||
var html = '<!doctype html><html><head><meta charset="utf-8"></head><body>' + activeFormHtml + '</body></html>'; |
|
||||||
|
|
||||||
jsdom({ |
|
||||||
html: html, |
|
||||||
src: fs.readFileSync(jQueryPath, 'utf-8') |
|
||||||
}); |
|
||||||
|
|
||||||
before(function () { |
|
||||||
$ = window.$; |
|
||||||
registerTestableCode(); |
|
||||||
sinon = require('sinon'); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('validate method', function () { |
|
||||||
var windowSetTimeoutStub; |
|
||||||
var afterValidateSpy; |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
windowSetTimeoutStub = sinon.stub(window, 'setTimeout', function (callback) { |
|
||||||
callback(); |
|
||||||
}); |
|
||||||
afterValidateSpy = sinon.spy(); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
windowSetTimeoutStub.restore(); |
|
||||||
afterValidateSpy.reset(); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with forceValidate parameter set to true', function () { |
|
||||||
it('should trigger manual form validation', function () { |
|
||||||
var inputId = 'name'; |
|
||||||
|
|
||||||
$activeForm = $('#w0'); |
|
||||||
$activeForm.yiiActiveForm([ |
|
||||||
{ |
|
||||||
id: inputId, |
|
||||||
input: '#' + inputId |
|
||||||
} |
|
||||||
]).on('afterValidate', afterValidateSpy); |
|
||||||
|
|
||||||
$activeForm.yiiActiveForm('validate', true); |
|
||||||
// https://github.com/yiisoft/yii2/issues/14510
|
|
||||||
assert.isTrue($activeForm.data('yiiActiveForm').validated); |
|
||||||
// https://github.com/yiisoft/yii2/issues/14186
|
|
||||||
assert.isTrue(afterValidateSpy.calledOnce); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('resetForm method', function () { |
|
||||||
var windowSetTimeoutStub; |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
windowSetTimeoutStub = sinon.stub(window, 'setTimeout', function (callback) { |
|
||||||
callback(); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
windowSetTimeoutStub.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should remove classes from error element', function () { |
|
||||||
var inputId = 'name'; |
|
||||||
var $input = $('#' + inputId); |
|
||||||
var options = { |
|
||||||
validatingCssClass: 'validating', |
|
||||||
errorCssClass: 'error', |
|
||||||
successCssClass: 'success', |
|
||||||
validationStateOn: 'input' |
|
||||||
}; |
|
||||||
|
|
||||||
$activeForm = $('#w0'); |
|
||||||
$activeForm.yiiActiveForm('destroy'); |
|
||||||
$activeForm.yiiActiveForm([ |
|
||||||
{ |
|
||||||
id: inputId, |
|
||||||
input: '#' + inputId |
|
||||||
} |
|
||||||
], options); |
|
||||||
|
|
||||||
$input.addClass(options.validatingCssClass); |
|
||||||
$input.addClass(options.errorCssClass); |
|
||||||
$input.addClass(options.successCssClass); |
|
||||||
$input.addClass('test'); |
|
||||||
$activeForm.yiiActiveForm('resetForm'); |
|
||||||
assert.isFalse($input.hasClass(options.validatingCssClass)); |
|
||||||
assert.isFalse($input.hasClass(options.errorCssClass)); |
|
||||||
assert.isFalse($input.hasClass(options.successCssClass)); |
|
||||||
assert.isTrue($input.hasClass('test')); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('events', function () { |
|
||||||
describe('afterValidateAttribute', function () { |
|
||||||
var afterValidateAttributeSpy; |
|
||||||
var eventData; |
|
||||||
|
|
||||||
before(function () { |
|
||||||
afterValidateAttributeSpy = sinon.spy(function (event, data) { |
|
||||||
eventData = data; |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
after(function () { |
|
||||||
afterValidateAttributeSpy.reset(); |
|
||||||
}); |
|
||||||
|
|
||||||
// https://github.com/yiisoft/yii2/issues/14318
|
|
||||||
|
|
||||||
it('should allow to get updated attribute value', function () { |
|
||||||
var inputId = 'name'; |
|
||||||
var $input = $('#' + inputId); |
|
||||||
|
|
||||||
$activeForm = $('#w0'); |
|
||||||
$activeForm.yiiActiveForm([ |
|
||||||
{ |
|
||||||
id: inputId, |
|
||||||
input: '#' + inputId |
|
||||||
} |
|
||||||
]).on('afterValidateAttribute', afterValidateAttributeSpy); |
|
||||||
|
|
||||||
$input.val('New value'); |
|
||||||
$activeForm.yiiActiveForm('updateAttribute', inputId); |
|
||||||
assert.equal('New value', eventData.value); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
@ -1,151 +0,0 @@ |
|||||||
var assert = require('chai').assert; |
|
||||||
var sinon; |
|
||||||
var withData = require('leche').withData; |
|
||||||
var jsdom = require('mocha-jsdom'); |
|
||||||
|
|
||||||
var fs = require('fs'); |
|
||||||
var vm = require('vm'); |
|
||||||
|
|
||||||
describe('yii.captcha', function () { |
|
||||||
var yiiCaptchaPath = 'framework/captcha/assets/yii.captcha.js'; |
|
||||||
var jQueryPath = 'vendor/bower-asset/jquery/dist/jquery.js'; |
|
||||||
var $; |
|
||||||
var $captcha; |
|
||||||
var settings = { |
|
||||||
refreshUrl: '/site/captcha?refresh=1', |
|
||||||
hashKey: 'yiiCaptcha/site/captcha' |
|
||||||
}; |
|
||||||
|
|
||||||
function registerTestableCode() { |
|
||||||
var code = fs.readFileSync(yiiCaptchaPath); |
|
||||||
var script = new vm.Script(code); |
|
||||||
var context = new vm.createContext({window: window}); |
|
||||||
|
|
||||||
script.runInContext(context); |
|
||||||
} |
|
||||||
|
|
||||||
var imgHtml = '<img id="captcha" class="captcha" src="/site/captcha/">' + |
|
||||||
'<img id="captcha-2" class="captcha" src="/site/captcha/">'; |
|
||||||
var html = '<!doctype html><html><head><meta charset="utf-8"></head><body>' + imgHtml + '</body></html>'; |
|
||||||
|
|
||||||
jsdom({ |
|
||||||
html: html, |
|
||||||
src: fs.readFileSync(jQueryPath, 'utf-8') |
|
||||||
}); |
|
||||||
|
|
||||||
before(function () { |
|
||||||
$ = window.$; |
|
||||||
registerTestableCode(); |
|
||||||
sinon = require('sinon'); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
if ($captcha.length) { |
|
||||||
$captcha.yiiCaptcha('destroy'); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
describe('init', function () { |
|
||||||
var customSettings = { |
|
||||||
refreshUrl: '/posts/captcha?refresh=1', |
|
||||||
hashKey: 'yiiCaptcha/posts/captcha' |
|
||||||
}; |
|
||||||
|
|
||||||
withData({ |
|
||||||
'no method specified': [function () { |
|
||||||
$captcha = $('.captcha').yiiCaptcha(settings); |
|
||||||
}, settings], |
|
||||||
'no method specified, custom options': [function () { |
|
||||||
$captcha = $('.captcha').yiiCaptcha(customSettings); |
|
||||||
}, customSettings], |
|
||||||
'manual method call': [function () { |
|
||||||
$captcha = $('.captcha').yiiCaptcha('init', settings); |
|
||||||
}, settings] |
|
||||||
}, function (initFunction, expectedSettings) { |
|
||||||
it('should save settings for all elements', function () { |
|
||||||
initFunction(); |
|
||||||
assert.deepEqual($('#captcha').data('yiiCaptcha'), {settings: expectedSettings}); |
|
||||||
assert.deepEqual($('#captcha-2').data('yiiCaptcha'), {settings: expectedSettings}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('refresh', function () { |
|
||||||
var server; |
|
||||||
var response = {hash1: 747, hash2: 748, url: '/site/captcha?v=584696959e038'}; |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
server = sinon.fakeServer.create(); |
|
||||||
window.XMLHttpRequest = global.XMLHttpRequest; |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
server.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
withData({ |
|
||||||
'click on the captcha': [function () { |
|
||||||
$captcha.trigger('click'); |
|
||||||
}], |
|
||||||
'manual method call': [function () { |
|
||||||
$captcha.yiiCaptcha('refresh'); |
|
||||||
}] |
|
||||||
}, function (refreshFunction) { |
|
||||||
it('should send ajax request, update the image and data for client-side validation', function () { |
|
||||||
$captcha = $('#captcha').yiiCaptcha(settings); |
|
||||||
refreshFunction(); |
|
||||||
server.requests[0].respond(200, {"Content-Type": "application/json"}, JSON.stringify(response)); |
|
||||||
|
|
||||||
assert.lengthOf(server.requests, 1); |
|
||||||
assert.include(server.requests[0].url, settings.refreshUrl + '&_='); |
|
||||||
assert.include(server.requests[0].requestHeaders.Accept, 'application/json'); |
|
||||||
assert.equal($captcha.attr('src'), response.url); |
|
||||||
assert.deepEqual($('body').data(settings.hashKey), [response.hash1, response.hash2]); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('destroy method', function () { |
|
||||||
var ajaxStub; |
|
||||||
|
|
||||||
before(function () { |
|
||||||
ajaxStub = sinon.stub($, 'ajax'); |
|
||||||
}); |
|
||||||
|
|
||||||
after(function () { |
|
||||||
ajaxStub.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
var message = 'should remove event handlers with saved settings for destroyed element only and return ' + |
|
||||||
'initial jQuery object'; |
|
||||||
it(message, function () { |
|
||||||
$captcha = $('.captcha').yiiCaptcha(settings); |
|
||||||
var $captcha1 = $('#captcha'); |
|
||||||
var $captcha2 = $('#captcha-2'); |
|
||||||
var destroyResult = $captcha1.yiiCaptcha('destroy'); |
|
||||||
$captcha1.trigger('click'); |
|
||||||
$captcha2.trigger('click'); |
|
||||||
|
|
||||||
assert.strictEqual(destroyResult, $captcha1); |
|
||||||
assert.isTrue(ajaxStub.calledOnce); |
|
||||||
assert.isUndefined($captcha1.data('yiiCaptcha')); |
|
||||||
assert.deepEqual($captcha2.data('yiiCaptcha'), {settings: settings}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('data method', function () { |
|
||||||
it('should return saved settings', function () { |
|
||||||
$captcha = $('#captcha').yiiCaptcha(settings); |
|
||||||
assert.deepEqual($captcha.yiiCaptcha('data'), {settings: settings}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('call of not existing method', function () { |
|
||||||
it('should throw according error', function () { |
|
||||||
$captcha = $('#captcha').yiiCaptcha(settings); |
|
||||||
assert.throws(function () { |
|
||||||
$captcha.yiiCaptcha('foobar'); |
|
||||||
}, 'Method foobar does not exist in jQuery.yiiCaptcha'); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
@ -1,791 +0,0 @@ |
|||||||
var assert = require('chai').assert; |
|
||||||
var sinon; |
|
||||||
var withData = require('leche').withData; |
|
||||||
var jsdom = require('mocha-jsdom'); |
|
||||||
|
|
||||||
var fs = require('fs'); |
|
||||||
var vm = require('vm'); |
|
||||||
|
|
||||||
describe('yii.gridView', function () { |
|
||||||
var yiiGridViewPath = 'framework/jquery/assets/yii.gridView.js'; |
|
||||||
var yiiPath = 'framework/jquery/assets/yii.js'; |
|
||||||
var jQueryPath = 'vendor/bower-asset/jquery/dist/jquery.js'; |
|
||||||
var $; |
|
||||||
var $gridView; |
|
||||||
var settings = { |
|
||||||
filterUrl: '/posts/index', |
|
||||||
filterSelector: '#w0-filters input, #w0-filters select' |
|
||||||
}; |
|
||||||
var commonSettings = { |
|
||||||
filterUrl: '/posts/index', |
|
||||||
filterSelector: '#w-common-filters input, #w-common-filters select' |
|
||||||
}; |
|
||||||
var $textInput; |
|
||||||
var $select; |
|
||||||
var $multipleSelect; |
|
||||||
var $listBox; |
|
||||||
var $checkAllCheckbox; |
|
||||||
var $checkRowCheckboxes; |
|
||||||
|
|
||||||
function registerYii() { |
|
||||||
var code = fs.readFileSync(yiiPath); |
|
||||||
var script = new vm.Script(code); |
|
||||||
var sandbox = {window: window, jQuery: $}; |
|
||||||
var context = new vm.createContext(sandbox); |
|
||||||
script.runInContext(context); |
|
||||||
return sandbox.window.yii; |
|
||||||
} |
|
||||||
|
|
||||||
function registerTestableCode() { |
|
||||||
var yii = registerYii(); |
|
||||||
var code = fs.readFileSync(yiiGridViewPath); |
|
||||||
var script = new vm.Script(code); |
|
||||||
var context = new vm.createContext({window: window, document: window.document, yii: yii}); |
|
||||||
script.runInContext(context); |
|
||||||
} |
|
||||||
|
|
||||||
var gridViewHtml = fs.readFileSync('tests/js/data/yii.gridView.html', 'utf-8'); |
|
||||||
var html = '<!doctype html><html><head><meta charset="utf-8"></head><body>' + gridViewHtml + '</body></html>'; |
|
||||||
|
|
||||||
jsdom({ |
|
||||||
html: html, |
|
||||||
src: fs.readFileSync(jQueryPath, 'utf-8') |
|
||||||
}); |
|
||||||
|
|
||||||
before(function () { |
|
||||||
$ = window.$; |
|
||||||
registerTestableCode(); |
|
||||||
sinon = require('sinon'); |
|
||||||
}); |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
$textInput = $('#w0-name'); |
|
||||||
$select = $('#w0-category'); |
|
||||||
$multipleSelect = $('#w0-tags'); |
|
||||||
$listBox = $('#w2-tags'); |
|
||||||
$checkAllCheckbox = $('#w0-check-all'); |
|
||||||
$checkRowCheckboxes = $('.w0-check-row'); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
if ($gridView.length) { |
|
||||||
$gridView.yiiGridView('destroy'); |
|
||||||
} |
|
||||||
$textInput.val(''); |
|
||||||
$select.val(''); |
|
||||||
$multipleSelect.find('option:selected').prop('selected', false); |
|
||||||
$listBox.find('option:selected').prop('selected', false); |
|
||||||
$checkAllCheckbox.prop('checked', false); |
|
||||||
$checkRowCheckboxes.prop('checked', false); |
|
||||||
}); |
|
||||||
|
|
||||||
/** |
|
||||||
* Simulate pressing "Enter" button while focused on some element |
|
||||||
* @param $el |
|
||||||
*/ |
|
||||||
function pressEnter($el) { |
|
||||||
var e = $.Event('keydown', {keyCode: 13}); |
|
||||||
$el.trigger(e); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Simulate pressing keyboard button while focused on the text input. For simplicity, intended to use with letter |
|
||||||
* buttons, such as "a", "b", etc. Case insensitive. |
|
||||||
* @param $el |
|
||||||
* @param buttonName |
|
||||||
*/ |
|
||||||
function pressButton($el, buttonName) { |
|
||||||
$el.val(buttonName); |
|
||||||
var keyCode = buttonName.charCodeAt(0); |
|
||||||
var e = $.Event('keydown', {keyCode: keyCode}); |
|
||||||
$el.trigger(e); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Simulate changing value in the select |
|
||||||
* @param $el |
|
||||||
* @param value |
|
||||||
*/ |
|
||||||
function changeValue($el, value) { |
|
||||||
$el.val(value); |
|
||||||
var e = $.Event('change'); |
|
||||||
$el.trigger(e); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Simulate losing focus of the element after the value was changed |
|
||||||
* @param $el |
|
||||||
*/ |
|
||||||
function loseFocus($el) { |
|
||||||
var e = $.Event('change'); |
|
||||||
$el.trigger(e); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Simulate click in the checkbox |
|
||||||
* @param $el |
|
||||||
*/ |
|
||||||
function click($el) { |
|
||||||
var e = $.Event('click'); |
|
||||||
$el.trigger(e); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Simulate hovering on the new value and pressing "Enter" button in the select |
|
||||||
* @param $el |
|
||||||
*/ |
|
||||||
function hoverAndPressEnter($el) { |
|
||||||
pressEnter($el); |
|
||||||
// After pressing enter while hovering the value will be immediately changed as well like with losing focus
|
|
||||||
loseFocus($el); |
|
||||||
} |
|
||||||
|
|
||||||
describe('init', function () { |
|
||||||
var customSettings = { |
|
||||||
filterUrl: '/posts/filter', |
|
||||||
filterSelector: '#w-common-filters input' |
|
||||||
}; |
|
||||||
|
|
||||||
withData({ |
|
||||||
'no method specified': [function () { |
|
||||||
$gridView = $('.grid-view').yiiGridView(commonSettings); |
|
||||||
}, commonSettings], |
|
||||||
'no method specified, custom settings': [function () { |
|
||||||
$gridView = $('.grid-view').yiiGridView(customSettings); |
|
||||||
}, customSettings], |
|
||||||
'manual method call': [function () { |
|
||||||
$gridView = $('.grid-view').yiiGridView('init', commonSettings); |
|
||||||
}, commonSettings] |
|
||||||
}, function (initFunction, expectedSettings) { |
|
||||||
it('should save settings for all elements', function () { |
|
||||||
initFunction(); |
|
||||||
assert.deepEqual($('#w0').yiiGridView('data'), {settings: expectedSettings}); |
|
||||||
assert.deepEqual($('#w1').yiiGridView('data'), {settings: expectedSettings}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with repeated call', function () { |
|
||||||
var jQuerySubmitStub; |
|
||||||
|
|
||||||
before(function () { |
|
||||||
jQuerySubmitStub = sinon.stub($.fn, 'submit'); |
|
||||||
}); |
|
||||||
|
|
||||||
after(function () { |
|
||||||
jQuerySubmitStub.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should remove "filter" event handler', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
$gridView.yiiGridView(settings); |
|
||||||
// Change selector to make sure event handlers are removed regardless of the selector
|
|
||||||
$gridView.yiiGridView({ |
|
||||||
filterUrl: '/posts/index', |
|
||||||
filterSelector: '#w0-filters select' |
|
||||||
}); |
|
||||||
|
|
||||||
pressEnter($textInput); |
|
||||||
assert.isFalse(jQuerySubmitStub.called); |
|
||||||
|
|
||||||
changeValue($select, 1); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('applyFilter', function () { |
|
||||||
var jQuerySubmit = function () { |
|
||||||
}; |
|
||||||
var jQuerySubmitStub; |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
jQuerySubmitStub = sinon.stub($.fn, 'submit', jQuerySubmit); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
jQuerySubmitStub.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with beforeFilter returning not false', function () { |
|
||||||
var calledMethods = []; // For testing the order of called methods
|
|
||||||
var beforeFilterSpy; |
|
||||||
var afterFilterSpy; |
|
||||||
|
|
||||||
before(function () { |
|
||||||
jQuerySubmit = function () { |
|
||||||
calledMethods.push('submit'); |
|
||||||
|
|
||||||
return this; |
|
||||||
}; |
|
||||||
beforeFilterSpy = sinon.spy(function () { |
|
||||||
calledMethods.push('beforeFilter'); |
|
||||||
}); |
|
||||||
afterFilterSpy = sinon.spy(function () { |
|
||||||
calledMethods.push('afterFilter'); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
after(function () { |
|
||||||
jQuerySubmit = function () { |
|
||||||
}; |
|
||||||
beforeFilterSpy.reset(); |
|
||||||
afterFilterSpy.reset(); |
|
||||||
calledMethods = []; |
|
||||||
}); |
|
||||||
|
|
||||||
var message = 'should send the request to correct url with correct parameters and apply events in ' + |
|
||||||
'correct order'; |
|
||||||
it(message, function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings) |
|
||||||
.on('beforeFilter', beforeFilterSpy) |
|
||||||
.on('afterFilter', afterFilterSpy); |
|
||||||
|
|
||||||
$textInput.val('a'); |
|
||||||
$select.val(1); |
|
||||||
$multipleSelect.find('option[value="1"]').prop('selected', true); |
|
||||||
$multipleSelect.find('option[value="2"]').prop('selected', true); |
|
||||||
|
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var expectedHtml = '<form action="/posts/index" method="get" class="gridview-filter-form" ' + |
|
||||||
'style="display:none" data-pjax="">' + |
|
||||||
'<input type="hidden" name="PostSearch[name]" value="a">' + |
|
||||||
'<input type="hidden" name="PostSearch[category_id]" value="1">' + |
|
||||||
'<input type="hidden" name="PostSearch[tags][]" value="1">' + |
|
||||||
'<input type="hidden" name="PostSearch[tags][]" value="2">' + |
|
||||||
'</form>'; |
|
||||||
var $form = $('.grid-view .gridview-filter-form'); |
|
||||||
assert.equal($form.get(0).outerHTML, expectedHtml); |
|
||||||
|
|
||||||
assert.isTrue(beforeFilterSpy.calledOnce); |
|
||||||
assert.instanceOf(beforeFilterSpy.getCall(0).args[0], $.Event); |
|
||||||
assert.equal($(beforeFilterSpy.getCall(0).args[0].target).attr('id'), $gridView.attr('id')); |
|
||||||
|
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
assert.equal(jQuerySubmitStub.returnValues[0].attr('class'), 'gridview-filter-form'); |
|
||||||
|
|
||||||
assert.isTrue(afterFilterSpy.calledOnce); |
|
||||||
assert.instanceOf(afterFilterSpy.getCall(0).args[0], $.Event); |
|
||||||
assert.equal($(afterFilterSpy.getCall(0).args[0].target).attr('id'), $gridView.attr('id')); |
|
||||||
|
|
||||||
assert.deepEqual(calledMethods, ['beforeFilter', 'submit', 'afterFilter']); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with beforeFilter returning false', function () { |
|
||||||
var beforeFilterSpy; |
|
||||||
var afterFilterSpy; |
|
||||||
|
|
||||||
before(function () { |
|
||||||
beforeFilterSpy = sinon.spy(function () { |
|
||||||
return false; |
|
||||||
}); |
|
||||||
afterFilterSpy = sinon.spy(); |
|
||||||
}); |
|
||||||
|
|
||||||
after(function () { |
|
||||||
beforeFilterSpy.reset(); |
|
||||||
afterFilterSpy.reset(); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should prevent from sending request and triggering "afterFilter" event', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings) |
|
||||||
.on('beforeFilter', beforeFilterSpy) |
|
||||||
.on('afterFilter', afterFilterSpy); |
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
assert.isTrue(beforeFilterSpy.calledOnce); |
|
||||||
assert.isFalse(jQuerySubmitStub.called); |
|
||||||
assert.isFalse(afterFilterSpy.called); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with different urls', function () { |
|
||||||
describe('with no filter data sent', function () { |
|
||||||
withData({ |
|
||||||
// https://github.com/yiisoft/yii2/issues/13738
|
|
||||||
'question mark, no query parameters': [ |
|
||||||
'/posts/index?', |
|
||||||
'/posts/index', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=' |
|
||||||
], |
|
||||||
'query parameters': [ |
|
||||||
'/posts/index?foo=1&bar=2', |
|
||||||
'/posts/index', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
|
||||||
], |
|
||||||
// https://github.com/yiisoft/yii2/pull/10302
|
|
||||||
'query parameter with multiple values (not array)': [ |
|
||||||
'/posts/index?foo=1&foo=2', |
|
||||||
'/posts/index', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&foo=2' |
|
||||||
], |
|
||||||
'query parameter with multiple values (array)': [ |
|
||||||
'/posts/index?foo[]=1&foo[]=2', |
|
||||||
'/posts/index', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=&foo[]=1&foo[]=2' |
|
||||||
], |
|
||||||
// https://github.com/yiisoft/yii2/issues/12836
|
|
||||||
'anchor': [ |
|
||||||
'/posts/index#post', |
|
||||||
'/posts/index#post', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=' |
|
||||||
], |
|
||||||
'query parameters, anchor': [ |
|
||||||
'/posts/index?foo=1&bar=2#post', |
|
||||||
'/posts/index#post', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
|
||||||
], |
|
||||||
'relative url, query parameters': [ |
|
||||||
'?foo=1&bar=2', |
|
||||||
'', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
|
||||||
], |
|
||||||
'relative url, anchor': [ |
|
||||||
'#post', |
|
||||||
'#post', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=' |
|
||||||
], |
|
||||||
'relative url, query parameters, anchor': [ |
|
||||||
'?foo=1&bar=2#post', |
|
||||||
'#post', |
|
||||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
|
||||||
] |
|
||||||
}, function (filterUrl, expectedUrl, expectedQueryString) { |
|
||||||
it('should send the request to correct url with correct parameters', function () { |
|
||||||
var customSettings = $.extend({}, settings, {filterUrl: filterUrl}); |
|
||||||
$gridView = $('#w0').yiiGridView(customSettings); |
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var $form = $gridView.find('.gridview-filter-form'); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
assert.equal($form.attr('action'), expectedUrl); |
|
||||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
// https://github.com/yiisoft/yii2/pull/10302
|
|
||||||
|
|
||||||
describe('with filter data sent', function () { |
|
||||||
it('should send the request to correct url with new parameter values', function () { |
|
||||||
var filterUrl = '/posts/index?CategorySearch[id]=5&CategorySearch[name]=c' + |
|
||||||
'&PostSearch[name]=a&PostSearch[category_id]=1&PostSearch[tags][]=1&PostSearch[tags][]=2' + |
|
||||||
'&foo[]=1&foo[]=2&bar=1#post'; |
|
||||||
var customSettings = $.extend({}, settings, {filterUrl: filterUrl}); |
|
||||||
$gridView = $('#w0').yiiGridView(customSettings); |
|
||||||
|
|
||||||
$textInput.val('b'); |
|
||||||
$select.val('1'); // Leave value as is (simulate setting "selected" in HTML)
|
|
||||||
$multipleSelect.find('option[value="2"]').prop('selected', true); |
|
||||||
$multipleSelect.find('option[value="3"]').prop('selected', true); |
|
||||||
|
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var $form = $gridView.find('.gridview-filter-form'); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
assert.equal($form.attr('action'), '/posts/index#post'); |
|
||||||
// Parameters not related with current filter are appended to the end
|
|
||||||
var expectedQueryString = 'PostSearch[name]=b&PostSearch[category_id]=1' + |
|
||||||
'&PostSearch[tags][]=2&PostSearch[tags][]=3' + |
|
||||||
'&CategorySearch[id]=5&CategorySearch[name]=c' + |
|
||||||
'&foo[]=1&foo[]=2&bar=1'; |
|
||||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with list box', function () { |
|
||||||
describe('with values selected', function () { |
|
||||||
it('should send the request to correct url with correct parameters', function () { |
|
||||||
$listBox.find('option[value="1"]').prop('selected', true); |
|
||||||
$listBox.find('option[value="2"]').prop('selected', true); |
|
||||||
|
|
||||||
$gridView = $('#w2').yiiGridView({ |
|
||||||
filterUrl: '/posts/index', |
|
||||||
filterSelector: '#w2-filters input, #w2-filters select' |
|
||||||
}); |
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var $form = $gridView.find('.gridview-filter-form'); |
|
||||||
var expectedQueryString = 'PostSearch[name]=&PostSearch[tags]=-1&PostSearch[tags][]=1' + |
|
||||||
'&PostSearch[tags][]=2'; |
|
||||||
|
|
||||||
assert.equal($form.attr('action'), '/posts/index'); |
|
||||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
// https://github.com/yiisoft/yii2/pull/10284
|
|
||||||
|
|
||||||
describe('with unselected values after applied filter', function () { |
|
||||||
it('should send the request to correct url with correct parameters', function () { |
|
||||||
$listBox.find('option[value="1"]').prop('selected', true); |
|
||||||
$listBox.find('option[value="2"]').prop('selected', true); |
|
||||||
|
|
||||||
var filterUrl = '/posts/index/?PostSearch[name]=&PostSearch[tags]=-1&PostSearch[tags][]=1' + |
|
||||||
'&PostSearch[tags][]=2'; |
|
||||||
$gridView = $('#w2').yiiGridView({ |
|
||||||
filterUrl: filterUrl, |
|
||||||
filterSelector: '#w2-filters input, #w2-filters select' |
|
||||||
}); |
|
||||||
$listBox.find('option:selected').prop('selected', false); |
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var $form = $gridView.find('.gridview-filter-form'); |
|
||||||
assert.equal($form.attr('action'), '/posts/index/'); |
|
||||||
assert.equal(decodeURIComponent($form.serialize()), 'PostSearch[name]=&PostSearch[tags]=-1'); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
// https://github.com/yiisoft/yii2/issues/13379
|
|
||||||
|
|
||||||
describe('with applied pagination', function () { |
|
||||||
it("should correctly change multiple select's data", function () { |
|
||||||
$listBox.find('option[value="2"]').prop('selected', true); |
|
||||||
$listBox.find('option[value="3"]').prop('selected', true); |
|
||||||
|
|
||||||
var filterUrl = '/posts/index?PostSearch[tags]=-1PostSearch[tags][0]=2&PostSearch[tags][1]=3' + |
|
||||||
'&page=2&per-page=2'; |
|
||||||
$gridView = $('#w2').yiiGridView({ |
|
||||||
filterUrl: filterUrl, |
|
||||||
filterSelector: '#w2-filters input, #w2-filters select' |
|
||||||
}); |
|
||||||
|
|
||||||
$listBox.find('option[value="4"]').prop('selected', true); |
|
||||||
|
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var $form = $gridView.find('.gridview-filter-form'); |
|
||||||
var expectedQueryString = 'PostSearch[name]=' + |
|
||||||
'&PostSearch[tags]=-1&PostSearch[tags][]=2&PostSearch[tags][]=3&PostSearch[tags][]=4' + |
|
||||||
'&page=2&per-page=2'; |
|
||||||
|
|
||||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with repeated method call', function () { |
|
||||||
it('should delete the hidden form', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
$gridView.yiiGridView('applyFilter'); |
|
||||||
|
|
||||||
var $form = $gridView.find('.gridview-filter-form'); |
|
||||||
assert.lengthOf($form, 1); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with filter event handlers', function () { |
|
||||||
beforeEach(function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with text entered in the text input', function () { |
|
||||||
it('should not submit form', function () { |
|
||||||
pressButton($textInput, 'a'); |
|
||||||
assert.isFalse(jQuerySubmitStub.called); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with "Enter" pressed in the text input', function () { |
|
||||||
it('should submit form once', function () { |
|
||||||
pressEnter($textInput); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with text entered in the text input and lost focus', function () { |
|
||||||
it('should submit form once', function () { |
|
||||||
pressButton($textInput, 'a'); |
|
||||||
loseFocus($textInput); |
|
||||||
|
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with value changed in the select', function () { |
|
||||||
it('should submit form once', function () { |
|
||||||
changeValue($select, 1); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with hover on different value and "Enter" pressed in select', function () { |
|
||||||
it('should submit form once', function () { |
|
||||||
// Simulate hovering on new value and pressing "Enter"
|
|
||||||
$select.val(1); |
|
||||||
hoverAndPressEnter($select); |
|
||||||
|
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('setSelectionColumn method', function () { |
|
||||||
describe('with name option and', function () { |
|
||||||
withData({ |
|
||||||
'nothing else': [{}], |
|
||||||
'checkAll option': [{checkAll: 'selection_all'}], |
|
||||||
'multiple option set to true': [{multiple: true}], |
|
||||||
'multiple and checkAll options, multiple set to false': [{multiple: false, checkAll: 'selection_all'}] |
|
||||||
}, function (customOptions) { |
|
||||||
it('should update data and do not activate "check all" functionality', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
|
|
||||||
var defaultOptions = {name: 'selection[]'}; |
|
||||||
var options = $.extend({}, defaultOptions, customOptions); |
|
||||||
$gridView.yiiGridView('setSelectionColumn', options); |
|
||||||
|
|
||||||
assert.equal($gridView.yiiGridView('data').selectionColumn, 'selection[]'); |
|
||||||
|
|
||||||
click($checkAllCheckbox); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 0); |
|
||||||
|
|
||||||
click($checkAllCheckbox); // Back to initial condition
|
|
||||||
click($checkRowCheckboxes); |
|
||||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with name, multiple and checkAll options, multiple set to true and', function () { |
|
||||||
withData({ |
|
||||||
'nothing else': [{}], |
|
||||||
// https://github.com/yiisoft/yii2/pull/11729
|
|
||||||
'class option': [{'class': 'w0-check-row'}] |
|
||||||
}, function (customOptions) { |
|
||||||
it('should update data and "check all" functionality should work', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
|
|
||||||
var defaultOptions = {name: 'selection[]', multiple: true, checkAll: 'selection_all'}; |
|
||||||
var options = $.extend({}, defaultOptions, customOptions); |
|
||||||
$gridView.yiiGridView('setSelectionColumn', options); |
|
||||||
|
|
||||||
assert.equal($gridView.yiiGridView('data').selectionColumn, 'selection[]'); |
|
||||||
|
|
||||||
var $checkFirstRowCheckbox = $checkRowCheckboxes.filter('[value="1"]'); |
|
||||||
|
|
||||||
// Check all
|
|
||||||
click($checkAllCheckbox); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 3); |
|
||||||
assert.isTrue($checkAllCheckbox.prop('checked')); |
|
||||||
|
|
||||||
// Uncheck all
|
|
||||||
click($checkAllCheckbox); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 0); |
|
||||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
|
||||||
|
|
||||||
// Check all manually
|
|
||||||
click($checkRowCheckboxes); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 3); |
|
||||||
assert.isTrue($checkAllCheckbox.prop('checked')); |
|
||||||
|
|
||||||
// Uncheck all manually
|
|
||||||
click($checkRowCheckboxes); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 0); |
|
||||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
|
||||||
|
|
||||||
// Check first row
|
|
||||||
click($checkFirstRowCheckbox); |
|
||||||
assert.isTrue($checkFirstRowCheckbox.prop('checked')); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 1); |
|
||||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
|
||||||
|
|
||||||
// Then check all
|
|
||||||
click($checkAllCheckbox); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 3); |
|
||||||
assert.isTrue($checkAllCheckbox.prop('checked')); |
|
||||||
|
|
||||||
// Uncheck first row
|
|
||||||
click($checkFirstRowCheckbox); |
|
||||||
assert.isFalse($checkFirstRowCheckbox.prop('checked')); |
|
||||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 2); |
|
||||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('with repeated calls', function () { |
|
||||||
var jQueryPropStub; |
|
||||||
|
|
||||||
before(function () { |
|
||||||
jQueryPropStub = sinon.stub($, 'prop'); |
|
||||||
}); |
|
||||||
|
|
||||||
after(function () { |
|
||||||
jQueryPropStub.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should not duplicate event handler calls', function () { |
|
||||||
$gridView = $('#w3').yiiGridView({ |
|
||||||
filterUrl: '/posts/index', |
|
||||||
filterSelector: '#w3-filters input, #w3-filters select' |
|
||||||
}); |
|
||||||
|
|
||||||
$gridView.yiiGridView('setSelectionColumn', { |
|
||||||
name: 'selection[]', |
|
||||||
multiple: true, |
|
||||||
checkAll: 'selection_all' |
|
||||||
}); |
|
||||||
// Change selectors to make sure event handlers are removed regardless of the selector
|
|
||||||
$gridView.yiiGridView('setSelectionColumn', { |
|
||||||
name: 'selection2[]', |
|
||||||
multiple: true, |
|
||||||
checkAll: 'selection_all2' |
|
||||||
}); |
|
||||||
$gridView.yiiGridView('setSelectionColumn', { |
|
||||||
name: 'selection[]', |
|
||||||
multiple: true, |
|
||||||
checkAll: 'selection_all' |
|
||||||
}); |
|
||||||
$gridView.yiiGridView('setSelectionColumn', { |
|
||||||
'class': 'w3-check-row', |
|
||||||
multiple: true, |
|
||||||
checkAll: 'selection_all' |
|
||||||
}); |
|
||||||
|
|
||||||
// Check first row ("prop" should be called once)
|
|
||||||
click($gridView.find('input[name="selection[]"][value="1"]')); |
|
||||||
// Check all rows ("prop" should be called 2 times, 1 time for each row)
|
|
||||||
click($gridView.find('input[name="selection_all"]')); |
|
||||||
|
|
||||||
assert.equal(jQueryPropStub.callCount, 3); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('getSelectedRows method', function () { |
|
||||||
withData({ |
|
||||||
'selectionColumn not set, no rows selected': [undefined, [], false, []], |
|
||||||
'selectionColumn not set, 1st and 2nd rows selected': [undefined, [1, 2], false, []], |
|
||||||
'selectionColumn set, no rows selected': ['selection[]', [], false, []], |
|
||||||
'selectionColumn set, 1st row selected': ['selection[]', [1], false, [1]], |
|
||||||
'selectionColumn set, 1st and 2nd rows selected': ['selection[]', [1, 2], false, [1, 2]], |
|
||||||
'selectionColumn set, all rows selected, "Check all" checkbox checked': [ |
|
||||||
'selection[]', [1, 2, 3], true, [1, 2, 3] |
|
||||||
] |
|
||||||
}, function (selectionColumn, selectedRows, checkAll, expectedSelectedRows) { |
|
||||||
it('should return array with ids of selected rows', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
$gridView.yiiGridView('setSelectionColumn', {name: selectionColumn}); |
|
||||||
for (var i = 0; i < selectedRows.length; i++) { |
|
||||||
$checkRowCheckboxes.filter('[value="' + selectedRows[i] + '"]').prop('checked', true); |
|
||||||
} |
|
||||||
if (checkAll) { |
|
||||||
$checkAllCheckbox.prop('checked', true); |
|
||||||
} |
|
||||||
assert.deepEqual($gridView.yiiGridView('getSelectedRows'), expectedSelectedRows); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('destroy method', function () { |
|
||||||
var jQuerySubmitStub; |
|
||||||
var jQueryPropStub; |
|
||||||
var beforeFilterSpy; |
|
||||||
var afterFilterSpy; |
|
||||||
|
|
||||||
beforeEach(function () { |
|
||||||
jQuerySubmitStub = sinon.stub($.fn, 'submit'); |
|
||||||
jQueryPropStub = sinon.stub($, 'prop'); |
|
||||||
beforeFilterSpy = sinon.spy(); |
|
||||||
afterFilterSpy = sinon.spy(); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(function () { |
|
||||||
jQuerySubmitStub.restore(); |
|
||||||
jQueryPropStub.restore(); |
|
||||||
beforeFilterSpy.reset(); |
|
||||||
afterFilterSpy.reset(); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should remove saved settings for destroyed element only and return initial jQuery object', function () { |
|
||||||
$gridView = $('.grid-view').yiiGridView(commonSettings); |
|
||||||
var $gridView1 = $('#w0'); |
|
||||||
var $gridView2 = $('#w1'); |
|
||||||
var destroyResult = $gridView1.yiiGridView('destroy'); |
|
||||||
|
|
||||||
assert.strictEqual(destroyResult, $gridView1); |
|
||||||
assert.isUndefined($gridView1.yiiGridView('data')); |
|
||||||
assert.deepEqual($gridView2.yiiGridView('data'), {settings: commonSettings}); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should remove "beforeFilter" and "afterFilter" event handlers for destroyed element only', function () { |
|
||||||
$gridView = $('.grid-view').yiiGridView(commonSettings) |
|
||||||
.on('beforeFilter', beforeFilterSpy) |
|
||||||
.on('afterFilter', afterFilterSpy); |
|
||||||
var $gridView1 = $('#w0'); |
|
||||||
var $gridView2 = $('#w1'); |
|
||||||
$gridView1.yiiGridView('destroy'); |
|
||||||
|
|
||||||
assert.throws(function () { |
|
||||||
$gridView1.yiiGridView('applyFilter'); |
|
||||||
}, "Cannot read property 'settings' of undefined"); |
|
||||||
$gridView1.yiiGridView(settings); // Reinitialize without "beforeFilter" and "afterFilter" event handlers
|
|
||||||
|
|
||||||
$gridView1.yiiGridView('applyFilter'); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
assert.isFalse(beforeFilterSpy.called); |
|
||||||
assert.isFalse(afterFilterSpy.called); |
|
||||||
|
|
||||||
$gridView2.yiiGridView('applyFilter'); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledTwice); |
|
||||||
assert.isTrue(beforeFilterSpy.calledOnce); |
|
||||||
assert.isTrue(afterFilterSpy.calledOnce); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should remove "filter" event handler for destroyed element only', function () { |
|
||||||
var $gridView1 = $('#w0'); |
|
||||||
var $gridView2 = $('#w1'); |
|
||||||
$gridView1.yiiGridView(settings); |
|
||||||
$gridView2.yiiGridView({ |
|
||||||
filterUrl: '/posts/index', |
|
||||||
filterSelector: '#w1-filters input, #w1-filters select' |
|
||||||
}); |
|
||||||
$gridView2.yiiGridView('destroy'); |
|
||||||
|
|
||||||
pressEnter($gridView2.find('input[name="PostSearch[id]"]')); |
|
||||||
assert.isFalse(jQuerySubmitStub.called); |
|
||||||
|
|
||||||
pressEnter($textInput); |
|
||||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
|
||||||
}); |
|
||||||
|
|
||||||
it('should remove "checkRow" and "checkAllRows" filter event handlers for destroyed element only', function () { |
|
||||||
$gridView = $('.grid-view').yiiGridView(commonSettings); |
|
||||||
var options = {name: 'selection[]', multiple: true, checkAll: 'selection_all'}; |
|
||||||
var $gridView1 = $('#w0'); |
|
||||||
var $gridView2 = $('#w1'); |
|
||||||
$gridView1.yiiGridView('setSelectionColumn', options); |
|
||||||
$gridView2.yiiGridView('setSelectionColumn', options); |
|
||||||
$gridView2.yiiGridView('destroy'); |
|
||||||
|
|
||||||
click($gridView2.find('input[name="selection_all"]')); |
|
||||||
click($gridView2.find('input[name="selection[]"][value="1"]')); |
|
||||||
assert.equal(jQueryPropStub.callCount, 0); |
|
||||||
|
|
||||||
click($checkRowCheckboxes.filter('[value="1"]')); // Check first row ("prop" should be called once)
|
|
||||||
click($checkAllCheckbox); // Check all rows ("prop" should be called 3 times, 1 time for each row)
|
|
||||||
assert.equal(jQueryPropStub.callCount, 4); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('data method', function () { |
|
||||||
it('should return saved settings', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
assert.deepEqual($gridView.yiiGridView('data'), {settings: settings}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
describe('call of not existing method', function () { |
|
||||||
it('should throw according error', function () { |
|
||||||
$gridView = $('#w0').yiiGridView(settings); |
|
||||||
assert.throws(function () { |
|
||||||
$gridView.yiiGridView('foobar'); |
|
||||||
}, 'Method foobar does not exist in jQuery.yiiGridView'); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
File diff suppressed because it is too large
Load Diff
@ -1,56 +0,0 @@ |
|||||||
FROM bylexus/apache-php7 |
|
||||||
|
|
||||||
|
|
||||||
# https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu |
|
||||||
RUN apt-get update |
|
||||||
RUN apt-get install -y curl apt-transport-https |
|
||||||
|
|
||||||
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - |
|
||||||
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list |
|
||||||
|
|
||||||
RUN apt-get update \ |
|
||||||
&& apt-get install -y unixodbc-dev-utf16 php-dev \ |
|
||||||
&& pecl install sqlsrv pdo_sqlsrv |
|
||||||
|
|
||||||
RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/apache2/php.ini |
|
||||||
RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini |
|
||||||
RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/cli/php.ini |
|
||||||
RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/cli/php.ini |
|
||||||
|
|
||||||
# IMPORTANT NOTICE! Install `msodbcsql` after `unixodbc-dev-utf16` and `pdo_sqlsrv`, due to dependency & build issues |
|
||||||
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql |
|
||||||
|
|
||||||
# Install system packages for composer (git) |
|
||||||
RUN apt-get update && \ |
|
||||||
apt-get -y install \ |
|
||||||
git \ |
|
||||||
php-curl \ |
|
||||||
--no-install-recommends && \ |
|
||||||
rm -rf /tmp/* /var/tmp/* |
|
||||||
# Register the COMPOSER_HOME environment variable |
|
||||||
ENV COMPOSER_HOME /composer |
|
||||||
# Add global binary directory to PATH and make sure to re-export it |
|
||||||
ENV PATH /usr/local/bin:$PATH |
|
||||||
# Allow Composer to be run as root |
|
||||||
ENV COMPOSER_ALLOW_SUPERUSER 1 |
|
||||||
# Install composer |
|
||||||
RUN curl -sS https://getcomposer.org/installer | php -- \ |
|
||||||
--filename=composer.phar \ |
|
||||||
--install-dir=/usr/local/bin |
|
||||||
RUN composer.phar global require --optimize-autoloader \ |
|
||||||
"hirak/prestissimo" |
|
||||||
|
|
||||||
|
|
||||||
# Project source-code |
|
||||||
WORKDIR /project |
|
||||||
ADD composer.* /project/ |
|
||||||
RUN /usr/local/bin/composer.phar install --prefer-dist |
|
||||||
ADD ./ /project |
|
||||||
|
|
||||||
# https://github.com/Microsoft/msphpsql/issues/161 |
|
||||||
RUN apt-get install -y locales \ |
|
||||||
&& echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ |
|
||||||
&& locale-gen |
|
||||||
|
|
||||||
# Debug installation |
|
||||||
RUN dpkg -L msodbcsql |
|
@ -1,34 +0,0 @@ |
|||||||
version: '2' |
|
||||||
services: |
|
||||||
|
|
||||||
php: |
|
||||||
build: |
|
||||||
context: ../.. |
|
||||||
dockerfile: tests/mssql/Dockerfile |
|
||||||
# Alternative pre-built image (TODO: evaluate) |
|
||||||
#image: ppoffice/apache-php-mssql-odbc |
|
||||||
ports: |
|
||||||
- 80 |
|
||||||
# Enable for debugging, Note: File-cache tests may be VERY slow or fail |
|
||||||
#volumes: |
|
||||||
# - ../../..:/project |
|
||||||
depends_on: |
|
||||||
- mssql |
|
||||||
# Enable for debugging |
|
||||||
#entrypoint: ['bash'] |
|
||||||
|
|
||||||
mssql: |
|
||||||
image: microsoft/mssql-server-linux |
|
||||||
# Alternative pre-built image (TODO: evaluate) |
|
||||||
#image: microsoft/mssql-server-windows |
|
||||||
environment: |
|
||||||
- ACCEPT_EULA=Y |
|
||||||
- SA_PASSWORD=Microsoft-12345 |
|
||||||
|
|
||||||
sqlcmd: |
|
||||||
image: tsgkadot/mssql-tools |
|
||||||
# Mount project for accessing SQL dump (TODO) |
|
||||||
volumes: |
|
||||||
- ../..:/project |
|
||||||
# Enable for debugging |
|
||||||
#entrypoint: ['bash'] |
|
Loading…
Reference in new issue